blob: c8f67ea35e83126c3479fabfe1b23f8326300e33 [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
syntax = "proto2";
package cryptohome;
// These fields are all marked optional because these protobufs are generated
// from objects stored on disk, such as the SerializedVaultKeyset. As a result
// cryptohome cannot assume the protobuf is always as expected. However, the
// fields should always be defined or the auth block cannot operate.
message AuthBlockState {
message TpmNotBoundToPcrAuthBlockState {
// Marks if the password is run through scrypt before going to the TPM.
optional bool scrypt_derived = 1;
// The salt used to bind to the TPM.
optional bytes salt = 2;
// The number of rounds key derivation is called.
optional uint32 password_rounds = 3;
// The VKK wrapped with the user's password by the tpm.
optional bytes tpm_key = 4;
// A check if this is the same TPM that wrapped the credential.
optional bytes tpm_public_key_hash = 5;
// The wrapped reset seed to reset LE credentials.
optional bytes wrapped_reset_seed = 6;
}
message TpmBoundToPcrAuthBlockState {
// Marks if the password is run through scrypt before going to the TPM.
optional bool scrypt_derived = 1;
// The salt used to bind to the TPM.
optional bytes salt = 2;
// The VKK encrypted with the user's password and TPM.
optional bytes tpm_key = 3;
// Same as tpm_key, but extends the PCR to only allow one user until reboot.
optional bytes extended_tpm_key = 4;
// A check if this is the same TPM that wrapped the credential.
optional bytes tpm_public_key_hash = 5;
// The wrapped reset seed to reset LE credentials.
optional bytes wrapped_reset_seed = 6;
}
message PinWeaverAuthBlockState {
// The label for the credential in the LE hash tree.
optional uint64 le_label = 1;
// The salt used to first scrypt the user input.
optional bytes salt = 2;
// The IV used to derive the chaps key.
optional bytes chaps_iv = 3;
// The IV used to derive the file encryption key.
optional bytes fek_iv = 4;
}
// This is a unique AuthBlockState for backwards compatibility. libscrypt puts
// the metadata, such as IV and salt, into the header of the encrypted
// buffer. Thus this is the only auth block state to pass wrapped secrets. See
// the LibScryptCompatAuthBlock header for a full explanation.
message LibScryptCompatAuthBlockState {
// The wrapped filesystem keys.
optional bytes wrapped_keyset = 1;
// The wrapped chaps keys.
optional bytes wrapped_chaps_key = 2;
// The wrapped reset seed keys.
optional bytes wrapped_reset_seed = 3;
}
message ChallengeCredentialAuthBlockState {
required LibScryptCompatAuthBlockState scrypt_state = 1;
}
message DoubleWrappedCompatAuthBlockState {
required LibScryptCompatAuthBlockState scrypt_state = 1;
required TpmNotBoundToPcrAuthBlockState tpm_state = 2;
}
message CryptohomeRecoveryAuthBlockState {
// Contains encrypted mediator share and data required for decryption.
message EncryptedMediatorShare {
// The integrity tag of the data generated during encryption of the
// mediator share.
optional bytes tag = 1;
// The initialization vector generated during encryption of the mediator
// share.
optional bytes iv = 2;
// Ephemeral key created during encryption of the mediator share.
optional bytes ephemeral_pub_key = 3;
// Encrypted mediator share.
optional bytes encrypted_data = 4;
};
// Secret share of the mediator encrypted to the mediator public key.
optional EncryptedMediatorShare encrypted_mediator_share = 1;
// Secret share of the destination (plaintext).
// TODO(b/184924482): store encrypted destination share.
optional bytes plaintext_destination_share = 2;
// The public key of the publisher ECC key.
optional bytes publisher_pub_key = 3;
}
oneof auth_block_state {
TpmNotBoundToPcrAuthBlockState tpm_not_bound_to_pcr_state = 1;
TpmBoundToPcrAuthBlockState tpm_bound_to_pcr_state = 2;
PinWeaverAuthBlockState pin_weaver_state = 3;
LibScryptCompatAuthBlockState libscrypt_compat_state = 4;
ChallengeCredentialAuthBlockState challenge_credential_state = 5;
DoubleWrappedCompatAuthBlockState double_wrapped_compat_state = 6;
CryptohomeRecoveryAuthBlockState cryptohome_recovery_state = 7;
}
}