[cryptohome] allow recovering encrypted stateful

This CL adds a mechanism for copying the contents of /mnt/stateful/encrypted out
into /mnt/stateful/decrypted at startup time, to be used by QA to recover system
logs. Authentication is provided by storage of the owning user's passkey (_NOT_
passphrase) in the request file. The passkey is computed as:
sha256(system-salt-as-hex || passphrase). The following shell script (which
nedes to be run on the device!) produces a passkey from a passphrase:

salt=$(od -A n -t x1 /home/.shadow/salt | tr -d ' ')
stty -echo
read -p "passphrase: " passphrase
stty echo
echo ""
echo $(echo -n "$salt$passphrase" | sha256sum | cut -c -32)

TEST=none yet
BUG=chromium-os:23075

Change-Id: I56a46b8c266da36973fc75da7e81b73b3cdc9b69
Signed-off-by: Elly Jones <ellyjones@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/31723
Reviewed-by: Kees Cook <keescook@chromium.org>
7 files changed
tree: ac1ffb5d5fd3923ad191ac178d1d708f4d405e66
  1. etc/
  2. share/
  3. attestation.cc
  4. attestation.h
  5. attestation.proto
  6. attestation_unittest.cc
  7. common.mk
  8. credentials.h
  9. crypto.cc
  10. crypto.h
  11. crypto_unittest.cc
  12. cryptohome-path.cc
  13. cryptohome.cc
  14. cryptohome.xml
  15. cryptohome_common.h
  16. cryptohome_event_source.cc
  17. cryptohome_event_source.h
  18. cryptohome_event_source_unittest.cc
  19. cryptohome_testrunner.cc
  20. cryptohomed.cc
  21. cryptolib.cc
  22. cryptolib.h
  23. email_to_image
  24. homedirs.cc
  25. homedirs.h
  26. homedirs_unittest.cc
  27. inherit-review-settings-ok
  28. install_attributes.cc
  29. install_attributes.h
  30. install_attributes.proto
  31. install_attributes_unittest.cc
  32. interface.cc
  33. interface.h
  34. LICENSE
  35. lockbox.cc
  36. lockbox.h
  37. lockbox_unittest.cc
  38. make_tests.cc
  39. make_tests.h
  40. make_tests.sh
  41. Makefile
  42. marshal.list
  43. mock_homedirs.h
  44. mock_install_attributes.h
  45. mock_lockbox.h
  46. mock_mount.h
  47. mock_platform.h
  48. mock_tpm.h
  49. mock_user_session.h
  50. mount.cc
  51. mount.h
  52. mount_stack.cc
  53. mount_stack.h
  54. mount_stack_unittest.cc
  55. mount_task.cc
  56. mount_task.h
  57. mount_task_unittest.cc
  58. mount_unittest.cc
  59. OWNERS
  60. pam_mount.conf.xml
  61. pkcs11_init.cc
  62. pkcs11_init.h
  63. platform.cc
  64. platform.h
  65. README
  66. README.dbus
  67. README.homedirs
  68. README.lockbox
  69. README.tpm
  70. service.cc
  71. service.h
  72. service_unittest.cc
  73. stateful_recovery.cc
  74. stateful_recovery.h
  75. tpm.cc
  76. tpm.h
  77. tpm_init.cc
  78. tpm_init.h
  79. tpm_status.proto
  80. user_oldest_activity_timestamp_cache.cc
  81. user_oldest_activity_timestamp_cache.h
  82. user_oldest_activity_timestamp_cache_unittest.cc
  83. user_session.cc
  84. user_session.h
  85. user_session_unittest.cc
  86. username_passkey.cc
  87. username_passkey.h
  88. username_passkey_unittest.cc
  89. vault_keyset.cc
  90. vault_keyset.h
  91. vault_keyset.proto
  92. vault_keyset_unittest.cc
  93. WATCHLISTS