New issue
Advanced search Search tips

Issue 806788 link

Starred by 1 user

Issue metadata

Status: Started
Owner:
Components:
EstimatedDays: ----
NextAction: ----
OS: Chrome
Pri: 2
Type: Feature

Blocked on: View detail
issue 837253
issue 842791
issue 827221
issue 836774

Blocking:
issue 791559



Sign in to add a comment

Smart card sign-in support in cryptohomed

Project Member Reported by emaxx@chromium.org, Jan 29 2018

Issue description

This bug tracks the work that has to be done on the cryptohomed side in order to support the smart card enterprise user sign-in in Chrome OS (launch bug 791559).
 
Project Member

Comment 1 by bugdroid1@chromium.org, Jan 31 2018

Labels: merge-merged-master-0.3.13
The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/third_party/trousers/+/418dbebdef6ea0fb7ad4001f12b9cb67fa62e5fb

commit 418dbebdef6ea0fb7ad4001f12b9cb67fa62e5fb
Author: Maksim Ivanov <emaxx@google.com>
Date: Wed Jan 31 16:29:44 2018

Trousers bugfix: TPM delegates with CMKs and PUBEK

Add missing code into a bunch of Trousers functions, in order to make
them work correctly when authorization via TPM owner delegates is used
(as opposed to authorization via owner password).

Without this fix, the affected TPM functions break with
TSS_E_TSP_AUTHFAIL when attempting to use them with owner delegates.

Some technical details:

TPM 1.2 specification provides two binary
protocols for issuing TPM commands: OIAP and DSAP. The first one is
more light-weight and is therefore preferred usually, but it only
supports owner authorization via password. The second one is heaiver,
but supports owner authorization via delegates.

Therefore many operations in Trousers that require owner authorization
contain the logic that chooses between OIAP and DSAP depending on
whether a delegate is used. But such logic is missing for several
functions.

This CL fixes it for the functions that we are going to use on Chrome OS
(we didn't set the goal of going through all functions and finding all
buggy ones) :
* TPM_CMK_ApproveMA,
* TPM_AuthorizeMigrationKey,
* TPM_CMK_CreateTicket,
* TPM_OwnerReadInternalPub,
* TPM_ReadPubek.

Note: We haven't found any fix for these bugs in upstream, nor bug
reports for these issues (most likely due to that the prerequisites for
the bug are involving TPM features that are not widely used). According
to some blame'ing, the bugs were in the code for at least 10 years.

BUG=chromium:806788,  chromium:793326 
TEST=manual: write code that uses CMKs and/or PUBEK with
     delegate authorization and test it on a real device

Change-Id: I8d7f86d716f1da76f4cabcd9f401c3ccc9a031ee
Reviewed-on: https://chromium-review.googlesource.com/721380
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/418dbebdef6ea0fb7ad4001f12b9cb67fa62e5fb/src/tspi/tspi_cmk.c
[modify] https://crrev.com/418dbebdef6ea0fb7ad4001f12b9cb67fa62e5fb/src/tspi/tspi_migration.c
[modify] https://crrev.com/418dbebdef6ea0fb7ad4001f12b9cb67fa62e5fb/src/tspi/tsp_ek.c
[modify] https://crrev.com/418dbebdef6ea0fb7ad4001f12b9cb67fa62e5fb/src/tspi/tsp_auth.c

Project Member

Comment 2 by bugdroid1@chromium.org, Feb 9 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/46422da23c67d6c2aa089ef918b7535343fbe9e6

commit 46422da23c67d6c2aa089ef918b7535343fbe9e6
Author: Maksim Ivanov <emaxx@google.com>
Date: Fri Feb 09 07:42:17 2018

trunks: Roll clang-formatting on tpm_generated.cc

This makes formatting of tpm_generated.* in accordance with the
current clang-format behavior.

The CL was generated by simply running generator/generator.py
(without any modifications in the input data).

BUG=chromium:806788
TEST=existing tests (no change of behavior is expected)

Change-Id: Ia844e223860df0b7fadbfe7bcac63a3e7d4144e3
Reviewed-on: https://chromium-review.googlesource.com/906548
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/46422da23c67d6c2aa089ef918b7535343fbe9e6/trunks/tpm_generated.cc
[modify] https://crrev.com/46422da23c67d6c2aa089ef918b7535343fbe9e6/trunks/tpm_generated.h
[modify] https://crrev.com/46422da23c67d6c2aa089ef918b7535343fbe9e6/trunks/README.md

Project Member

Comment 3 by bugdroid1@chromium.org, Feb 21 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform/system_api/+/0eae09da9542bf59d327d00d641b7d53078fd269

commit 0eae09da9542bf59d327d00d641b7d53078fd269
Author: Maksim Ivanov <emaxx@google.com>
Date: Wed Feb 21 02:16:31 2018

system_api: New fields and messages for challenge-response cryptohome keys

Adds support for challenge-response cryptohome keys which is based on RSA
signing keys:
* Extend KeyData with a new type enum and new fields that describe public
  information of an RSA key;
* Add KeyChallengeRequest that will be a parameter for the new
  KeyChallenge signal and will hold the challenge blob and the reference
  to the challenged RSA key;
* Add KeyChallengeResponse that will be a parameter for the new
  RespondKeyChallenge method and will hold the RSA signature.

BUG=chromium:806788
TEST=none (verify that protos compile successfully)

Change-Id: I0c7168668daf7bb22509962ce569235a2a5ac381
Reviewed-on: https://chromium-review.googlesource.com/911797
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/0eae09da9542bf59d327d00d641b7d53078fd269/dbus/cryptohome/key.proto
[modify] https://crrev.com/0eae09da9542bf59d327d00d641b7d53078fd269/dbus/cryptohome/rpc.proto

Comment 4 by emaxx@chromium.org, Feb 21 2018

Attaching the Design Doc here just in case (it was already attached to the launch bug): http://go/extended-login-smart-cards .
Project Member

Comment 5 by bugdroid1@chromium.org, Feb 27 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/1831e1c98fa90bcf9ae2a87dcd8d5d79b16d3455

commit 1831e1c98fa90bcf9ae2a87dcd8d5d79b16d3455
Author: Maksim Ivanov <emaxx@google.com>
Date: Tue Feb 27 03:28:37 2018

cryptohome: Add Certified Migratable Keys into TPM 1.2 delegate

Make the delegate, which is created during owning TPM 1.2, include
the following additional permissions:
* TPM_DELEGATE_AuthorizeMigrationKey (for calling
  TPM_AuthorizeMigrationKey),
* TPM_DELEGATE_CMK_ApproveMA (for calling TPM_CMK_ApproveMA),
* TPM_DELEGATE_CMK_CreateTicket (for calling TPM_CMK_CreateTicket).

These functions will be used for working with Certified Migratable
Keys, which will be part of the implementation of the signature-based
challenge-response cryptohome protection. In particular:
1. Signature-protected secret construction:
   will use TPM_CMK_ApproveMA to create a CMK associated with the
   key to be challenged;
2. Secret unsealing after obtaining the requested signature:
   will use TPM_AuthorizeMigrationKey to allow the CMK migration
   onto the just-generated destination key, and will use
   TPM_CMK_CreateTicket to verify the required signature and obtain
   the ticket for performing the CMK migration.

BUG=chromium:806788
TEST=existing tests: unit tests, the platform_Attestation autotest

Change-Id: I17a63c1dc6c828b5fbafa19995f1eeaf3a42cb55
Reviewed-on: https://chromium-review.googlesource.com/929761
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/1831e1c98fa90bcf9ae2a87dcd8d5d79b16d3455/cryptohome/tpm_impl.cc

Project Member

Comment 6 by bugdroid1@chromium.org, Feb 27 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/cab8a0c583c6ca107fdb5104190566e83af043e8

commit cab8a0c583c6ca107fdb5104190566e83af043e8
Author: Maksim Ivanov <emaxx@google.com>
Date: Tue Feb 27 13:14:33 2018

cryptohome: Clean up "using" of types in global scope in headers

Remove usages of the "using" directive in global scope in headers that just save
typing, because these directives take an effect on all files that include them
too. Such usages of "using" are against the style guide.

BUG=chromium:806788
TEST=none (existing unit tests)

Change-Id: Ic01896b438a068e3c9bffad6520dcc2632a29470
Reviewed-on: https://chromium-review.googlesource.com/932501
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Ryo Hashimoto <hashimoto@chromium.org>

[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/boot_lockbox_unittest.cc
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/mock_user_session.cc
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/boot_attributes_unittest.cc
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/mock_keystore.cc
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/mock_tpm.cc
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/tpm_live_test.h
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/service_monolithic.cc
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/mock_platform.cc
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/mock_keystore.h
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/mock_platform.h
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/service.h
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/homedirs_unittest.cc
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/stub_tpm.h
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/mock_lockbox.h
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/dircrypto_data_migrator/migration_helper_unittest.cc
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/mount_task.h
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/attestation_task.h
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/mock_tpm.h
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/mock_user_session.h
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/mock_service.h
[modify] https://crrev.com/cab8a0c583c6ca107fdb5104190566e83af043e8/cryptohome/service_distributed.cc

Project Member

Comment 7 by bugdroid1@chromium.org, Feb 27 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/556757f0f9ffc0305f09ba2623a820b375ed1c9d

commit 556757f0f9ffc0305f09ba2623a820b375ed1c9d
Author: Maksim Ivanov <emaxx@google.com>
Date: Tue Feb 27 15:32:06 2018

trunks: Fix marshalling of size in complex TPM2B_ structs

1. Fix incorrect serializing and parsing of complex TPM2B_ structures in cases
   where the "size" field is zero.
2. Make consistent and enforce the convention that the "size" field for such
   structures is EITHER zero OR sizeof of the enclosed structure (but NOT the
   length of the marshalled representation nor any other value).

In detail, #1 is, as believed, bringing the implementation in conformance to the
specs:

> When the type of the second parameter in the TPM2B_ structure is not BYTE, the
> value of the size field
> shall either be zero indicating that no structure is to be unmarshaled; or it
> shall be identical to the number
> of octets unmarshaled for the second parameter.

(TPM 2.0 Part 2 Chapter 10.4 "Sized Buffers").

So before this CL, the serializing and parsing functions didn't handle the case
of zero size that is decribed in the quote above. Instead, they always behaved
by serializing/parsing the enclosed structure. For example, a full-zeroed
TPM2B_SENSITIVE was serialized as "\0\x6\0\0\0\0\0\0", instead of just "\0\0".
The CL fixes the behavior to produce the latter. (Which allows to pass such
"empty" structures as TPM function arguments when it's required.)

And the change #2 is, basically, about more consistence in the code, because
before this CL one part of code (e.g., the Make_* functions) was putting the
value of sizeof into the size field, while the other part of code (e.g., the
Parse_* functions) was putting the length of the marshalled representation. The
CL makes all of them to use the former.

BUG=chromium:806788
TEST=existing and new unit tests

Change-Id: Ied11b00f2ead53dac345885915b7d073775f9417
Reviewed-on: https://chromium-review.googlesource.com/906930
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Darren Krahn <dkrahn@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/556757f0f9ffc0305f09ba2623a820b375ed1c9d/trunks/generator/generator.py
[modify] https://crrev.com/556757f0f9ffc0305f09ba2623a820b375ed1c9d/trunks/tpm_generated.cc
[modify] https://crrev.com/556757f0f9ffc0305f09ba2623a820b375ed1c9d/trunks/tpm_generated_test.cc

Project Member

Comment 8 by bugdroid1@chromium.org, Feb 27 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/12b6ca61aaaa94bc806f7ba082d50dd76c6e0c0e

commit 12b6ca61aaaa94bc806f7ba082d50dd76c6e0c0e
Author: Maksim Ivanov <emaxx@google.com>
Date: Tue Feb 27 20:09:05 2018

trunks: Stricter checks of blob parsing leftovers

This CL throws in a few more checks that the data buffer was completely parsed,
without a single byte staying left, after performing the TPM types parsing.

In other words, this change is effectively adding more assertions on the input
data format.

The expectation is that nothing should break as a result of this change,
assuming that the existing client code calls trunks functions with correct
inputs.

BUG=chromium:806788
TEST=existing and new unit tests

Change-Id: Iaaac11df3619b5ce04ba6465b9d5085a76b75561
Reviewed-on: https://chromium-review.googlesource.com/908553
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Darren Krahn <dkrahn@chromium.org>

[modify] https://crrev.com/12b6ca61aaaa94bc806f7ba082d50dd76c6e0c0e/trunks/resource_manager_test.cc
[modify] https://crrev.com/12b6ca61aaaa94bc806f7ba082d50dd76c6e0c0e/trunks/resource_manager.cc
[modify] https://crrev.com/12b6ca61aaaa94bc806f7ba082d50dd76c6e0c0e/trunks/tpm_utility_test.cc
[modify] https://crrev.com/12b6ca61aaaa94bc806f7ba082d50dd76c6e0c0e/trunks/hmac_authorization_delegate_test.cc
[modify] https://crrev.com/12b6ca61aaaa94bc806f7ba082d50dd76c6e0c0e/trunks/blob_parser.cc
[modify] https://crrev.com/12b6ca61aaaa94bc806f7ba082d50dd76c6e0c0e/trunks/hmac_authorization_delegate.cc

Project Member

Comment 9 by bugdroid1@chromium.org, Mar 1 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/ec3c50302d4cd15c5ddf6b8780900382b70589e3

commit ec3c50302d4cd15c5ddf6b8780900382b70589e3
Author: Maksim Ivanov <emaxx@google.com>
Date: Thu Mar 01 20:39:03 2018

trunks: Add library support for TPM2_PolicySigned

TPM2_PolicySigned allows building signature-based authorization, which requires
the caller to provide a correct signature for the given blob (which
incorporates, besides others, the TPM-generated nonce).

This CL adds high-level API pieces that allow to use this feature from the
client code:
* Obtaining the current TPM-generated nonce;
* Loading an RSA public key into the TPM;
* Updating a policy session with a signature-based auth.

BUG=chromium:806788
TEST=existing and new unit tests

Change-Id: Id53b5c556031f9e0398b8284ca6fbcb465f3a32e
Reviewed-on: https://chromium-review.googlesource.com/902902
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/trunks/mock_policy_session.h
[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/trunks/trunks_factory_for_test.cc
[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/trunks/policy_session_impl.cc
[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/trunks/hmac_authorization_delegate.cc
[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/trunks/mock_tpm_utility.h
[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/trunks/policy_session_test.cc
[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/trunks/tpm_utility_impl.h
[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/attestation/common/tpm_utility_v2.cc
[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/trunks/tpm_utility_impl.cc
[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/trunks/hmac_authorization_delegate.h
[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/trunks/tpm_utility_test.cc
[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/trunks/hmac_authorization_delegate_test.cc
[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/trunks/policy_session_impl.h
[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/trunks/authorization_delegate.h
[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/trunks/policy_session.h
[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/trunks/mock_authorization_delegate.h
[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/trunks/tpm_utility.h
[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/trunks/password_authorization_delegate.cc
[modify] https://crrev.com/ec3c50302d4cd15c5ddf6b8780900382b70589e3/trunks/password_authorization_delegate.h

Project Member

Comment 10 by bugdroid1@chromium.org, Mar 5 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/0b52deb81094774a6851a2ec8ede25f34cc86e9e

commit 0b52deb81094774a6851a2ec8ede25f34cc86e9e
Author: Maksim Ivanov <emaxx@google.com>
Date: Mon Mar 05 19:33:32 2018

cryptohome: New methods/signals for challenge-response keys

* KeyChallenge signal that will be used for sending the challenge
  data to the browser (in the first version, this will contain the
  challenge blob and the reference to the challenged RSA key);
* RespondKeyChallenge method that will be used for sending the
  challenge response data back from the browser (in the first
  version, this will contain the RSA signature blob).

The CL just adds interface parts. There's no implementation behind
the added methods/signals yet.

BUG=chromium:806788
TEST=none
CQ-DEPEND=CL:911797

Change-Id: I3437bfa38e2edcb1af3fa5fa320fb9c35478f59d
Reviewed-on: https://chromium-review.googlesource.com/911799
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Mattias Nissler <mnissler@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/0b52deb81094774a6851a2ec8ede25f34cc86e9e/cryptohome/etc/Cryptohome.conf
[modify] https://crrev.com/0b52deb81094774a6851a2ec8ede25f34cc86e9e/cryptohome/service.h
[modify] https://crrev.com/0b52deb81094774a6851a2ec8ede25f34cc86e9e/cryptohome/interface.cc
[modify] https://crrev.com/0b52deb81094774a6851a2ec8ede25f34cc86e9e/cryptohome/interface.h
[modify] https://crrev.com/0b52deb81094774a6851a2ec8ede25f34cc86e9e/cryptohome/service.cc
[modify] https://crrev.com/0b52deb81094774a6851a2ec8ede25f34cc86e9e/cryptohome/dbus_bindings/org.chromium.CryptohomeInterface.xml

Project Member

Comment 11 by bugdroid1@chromium.org, Mar 10 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/760adb86ae148923221dbda84b0cc703e17f86eb

commit 760adb86ae148923221dbda84b0cc703e17f86eb
Author: Maksim Ivanov <emaxx@google.com>
Date: Sat Mar 10 16:44:08 2018

cryptohome: Fix crash in PCRKeyTest live test on TPM 1.2

This fixes the PCRKeyTest live test to not extend the PCR with a
blob of wrong length. The test supplied 6 bytes of data, while the
the TPM 1.2 implementation requires the blob to be 20 bytes length,
which was causing a CHECK hit.

BUG=chromium:806788
TEST=run live test "cryptohome --action=tpm_live_test" - on leon
     (TPM 1.2 device) and on snappy (TPM 2.0 device)

Change-Id: Ia0d9381562a48ac60dbf01551bfbfd7a673455ee
Reviewed-on: https://chromium-review.googlesource.com/931525
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/760adb86ae148923221dbda84b0cc703e17f86eb/cryptohome/tpm_live_test.cc
[modify] https://crrev.com/760adb86ae148923221dbda84b0cc703e17f86eb/cryptohome/tpm_live_test.h

Project Member

Comment 12 by bugdroid1@chromium.org, Mar 17 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/aa6d80f754ac329f52c51000bd6ef06247393c78

commit aa6d80f754ac329f52c51000bd6ef06247393c78
Author: Maksim Ivanov <emaxx@google.com>
Date: Sat Mar 17 03:55:33 2018

cryptohome: Bulletproof Nvram TPM live test

Make the Nvram test successfully survive the case where the old
Nvram data from the previous test execution persists.

BUG=chromium:806788
TEST=manual: start TPM live test, terminate during the Nvram test,
     start again and check that it completes successfully

Change-Id: If33e5c0fdb41e57fa83bf0a1fe3c4a323ccdd774
Reviewed-on: https://chromium-review.googlesource.com/966822
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/aa6d80f754ac329f52c51000bd6ef06247393c78/cryptohome/tpm_live_test.cc

Project Member

Comment 13 by bugdroid1@chromium.org, Mar 18 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/7ba2341a6baa07c15dbf19161a25883720347af0

commit 7ba2341a6baa07c15dbf19161a25883720347af0
Author: Maksim Ivanov <emaxx@google.com>
Date: Sun Mar 18 04:35:00 2018

cryptohome: Extract TPM live tests into a standalone tool

This addresses two goals:
* Stop including the "live test" code into the release images of
  Chromium OS;
* Fix tests that require TPM ownership on TPM 1.2, as they were breaking
  due to flags state disalignment comparing to the daemon. Now the
  approach is that the live tests tool must be executed only after the
  ownership is taken.

BUG=chromium:806788
TEST=existing cryptohome tests;
     build cryptohome-dev-utils.gyp, deploy cryptohome-tpm-live-test
     onto a test device (used leon for TPM 1.2 and snappy for TPM 2.0),
     run cryptohome-tpm-live-test, check that the live tests complete
     successfully

Change-Id: I21af19caa0ba64aef44e127958896e50a2f11c1b
Reviewed-on: https://chromium-review.googlesource.com/951608
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>

[add] https://crrev.com/7ba2341a6baa07c15dbf19161a25883720347af0/cryptohome/cryptohome-libs.gypi
[modify] https://crrev.com/7ba2341a6baa07c15dbf19161a25883720347af0/cryptohome/cryptohome.cc
[modify] https://crrev.com/7ba2341a6baa07c15dbf19161a25883720347af0/cryptohome/cryptohome.gyp
[add] https://crrev.com/7ba2341a6baa07c15dbf19161a25883720347af0/cryptohome/cryptohome-dev-utils.gyp
[add] https://crrev.com/7ba2341a6baa07c15dbf19161a25883720347af0/cryptohome/cryptohome-tpm-live-test.cc

Project Member

Comment 14 by bugdroid1@chromium.org, Mar 19 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/5d41fde3a19a06388c60dbb8a7d17b65042f5a69

commit 5d41fde3a19a06388c60dbb8a7d17b65042f5a69
Author: Maksim Ivanov <emaxx@google.com>
Date: Mon Mar 19 01:44:11 2018

cryptohome: Signature-protected sealing with TPM2

Implement sealing of secret data to the specified public key, such that
unsealing requires signing a challenge (a random nonce); the implementation is
currently provided only for TPM 2.0.

This sealing is based on the TPM2_PolicySigned functionality of TPM 2.0.

The CL is also aiming at structuring the code so that the same internal APIs
(SignatureSealingBackend and related) can be implemented for TPM 1.2 as well -
but that will happen in future CLs.

Besides mock-based unit tests, also a "live" test is provided, which allows to
test the sealing and unsealing against real TPM's.

BUG=chromium:806788
TEST=unit tests: Tpm2RsaSignatureSecretSealingTest.*;
     running live test on a real device (snappy) via
     cryptohome --action=tpm_live_test

Change-Id: I7c2f2b1230fdb07c625a4becf04c2b78b46f6352
Reviewed-on: https://chromium-review.googlesource.com/914903
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/5d41fde3a19a06388c60dbb8a7d17b65042f5a69/cryptohome/cryptohome-libs.gypi
[add] https://crrev.com/5d41fde3a19a06388c60dbb8a7d17b65042f5a69/cryptohome/signature_sealing_backend_tpm2_impl.h
[modify] https://crrev.com/5d41fde3a19a06388c60dbb8a7d17b65042f5a69/cryptohome/tpm_live_test.h
[modify] https://crrev.com/5d41fde3a19a06388c60dbb8a7d17b65042f5a69/cryptohome/tpm2_impl.cc
[modify] https://crrev.com/5d41fde3a19a06388c60dbb8a7d17b65042f5a69/cryptohome/tpm_impl.cc
[modify] https://crrev.com/5d41fde3a19a06388c60dbb8a7d17b65042f5a69/cryptohome/tpm.h
[modify] https://crrev.com/5d41fde3a19a06388c60dbb8a7d17b65042f5a69/cryptohome/stub_tpm.h
[modify] https://crrev.com/5d41fde3a19a06388c60dbb8a7d17b65042f5a69/cryptohome/tpm2_impl.h
[add] https://crrev.com/5d41fde3a19a06388c60dbb8a7d17b65042f5a69/cryptohome/signature_sealing_backend.h
[modify] https://crrev.com/5d41fde3a19a06388c60dbb8a7d17b65042f5a69/cryptohome/tpm_impl.h
[modify] https://crrev.com/5d41fde3a19a06388c60dbb8a7d17b65042f5a69/cryptohome/cryptolib.cc
[modify] https://crrev.com/5d41fde3a19a06388c60dbb8a7d17b65042f5a69/cryptohome/mock_tpm.h
[modify] https://crrev.com/5d41fde3a19a06388c60dbb8a7d17b65042f5a69/cryptohome/tpm2_test.cc
[add] https://crrev.com/5d41fde3a19a06388c60dbb8a7d17b65042f5a69/cryptohome/signature_sealing_backend_tpm2_impl.cc
[add] https://crrev.com/5d41fde3a19a06388c60dbb8a7d17b65042f5a69/cryptohome/signature_sealed_data.proto
[modify] https://crrev.com/5d41fde3a19a06388c60dbb8a7d17b65042f5a69/cryptohome/tpm_live_test.cc

Project Member

Comment 15 by bugdroid1@chromium.org, Mar 20 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform/system_api/+/6b10ccb5ca2d236d25c32a160e5e7c6f9645d9b2

commit 6b10ccb5ca2d236d25c32a160e5e7c6f9645d9b2
Author: Maksim Ivanov <emaxx@google.com>
Date: Tue Mar 20 02:21:45 2018

cryptohome: Constants for challenge-response methods

* Add constants for the new cryptohome D-Bus method RespondKeyChallenge
  and signal KeyChallenge.
* Prefix the ChallengeSignatureAlgorithm enum values to make them be more
  specific - these definitions belong to the outer scope.

BUG=chromium:806788
TEST=none

Change-Id: I789bcf354b58368794939ac7e7d79202bff7ce71
Reviewed-on: https://chromium-review.googlesource.com/964341
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Ben Chan <benchan@chromium.org>

[modify] https://crrev.com/6b10ccb5ca2d236d25c32a160e5e7c6f9645d9b2/dbus/cryptohome/key.proto
[modify] https://crrev.com/6b10ccb5ca2d236d25c32a160e5e7c6f9645d9b2/dbus/cryptohome/dbus-constants.h

Project Member

Comment 16 by bugdroid1@chromium.org, Mar 21 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/34babceaf98dba1369d091e449ba2c0021ddcb1e

commit 34babceaf98dba1369d091e449ba2c0021ddcb1e
Author: Maksim Ivanov <emaxx@google.com>
Date: Wed Mar 21 05:21:38 2018

Add cryptohome-dev-utils package

This will correspond to binaries that are useful for developers and
can be used for autotests, but should be excluded from release builds.

The new package is included into dev and test Chromium OS images.

BUG=chromium:806788
TEST=cros_workon_make --board=${BOARD} cryptohome-dev-utils
CQ-DEPEND=CL:951608

Change-Id: Id4f14e84a9e82cb8749f3ea31228875f997c1daa
Reviewed-on: https://chromium-review.googlesource.com/951733
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>

[add] https://crrev.com/34babceaf98dba1369d091e449ba2c0021ddcb1e/chromeos-base/cryptohome-dev-utils/cryptohome-dev-utils-9999.ebuild
[rename] https://crrev.com/34babceaf98dba1369d091e449ba2c0021ddcb1e/virtual/target-chromium-os-dev/target-chromium-os-dev-1-r30.ebuild
[modify] https://crrev.com/34babceaf98dba1369d091e449ba2c0021ddcb1e/virtual/target-chromium-os-dev/target-chromium-os-dev-1.ebuild

Project Member

Comment 17 by bugdroid1@chromium.org, Mar 21 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/36ca7f7d92f9671ab46765321546dcf6a0ddb09c

commit 36ca7f7d92f9671ab46765321546dcf6a0ddb09c
Author: Maksim Ivanov <emaxx@google.com>
Date: Wed Mar 21 05:21:33 2018

Fix Trousers dependencies

Fix discrepancy between DEPEND and RDEPEND.

BUG=chromium:959964,chromium:806788
TEST=existing tests

Change-Id: I6512038291cfe546d9a2f2d461f3e825551aa819
Reviewed-on: https://chromium-review.googlesource.com/960661
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>

[modify] https://crrev.com/36ca7f7d92f9671ab46765321546dcf6a0ddb09c/app-crypt/trousers/trousers-9999.ebuild

Project Member

Comment 18 by bugdroid1@chromium.org, Mar 21 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/a43f60fa3f7bdff033a9678dad36282f68f5a701

commit a43f60fa3f7bdff033a9678dad36282f68f5a701
Author: Maksim Ivanov <emaxx@google.com>
Date: Wed Mar 21 05:21:20 2018

attestation: Fix memory leaks in TPM 1.2 ScopedTssMemory usages

This fixes several instantiations of ScopedTssMemory to not leak the
allocated memory. They were leaking because the zero TSS_HCONTEXT was
provided to them, which was making the ScopedTssMemory destructor
effectively a no-op.

BUG= chromium:821825 ,chromium:806788
TEST=existing tests

Change-Id: I945e9513caa3ea2255cbd7f66fde370715bce93d
Reviewed-on: https://chromium-review.googlesource.com/962426
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/a43f60fa3f7bdff033a9678dad36282f68f5a701/attestation/common/tpm_utility_v1.cc

Project Member

Comment 19 by bugdroid1@chromium.org, Mar 21 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/aac339cfdc67463b1defe88b330520fcae3660d2

commit aac339cfdc67463b1defe88b330520fcae3660d2
Author: Maksim Ivanov <emaxx@google.com>
Date: Wed Mar 21 11:39:39 2018

cryptohome: Skip AIK loading for TPM 1.2 delegate creation

Remove loading of the Attestation Identity Key before creating the TPM 1.2
delegate - as, presumably, this was a no-op that didn't affect the delegate
creation in any way. The AIK used to be simply loaded and not passed anywhere
explicitly; the Trousers' delegate creation procedures also don't seem to depend
on whether the AIK is loaded or not.

Besides removing unnecessary code, this change should also simplify writing TPM
live tests that need to work with delegates.

BUG=chromium:806788
TEST=existing tests;
     the "platform_Attestation" autotest on a TPM 1.2 device (e.g. leon)

Change-Id: I49d679f5ac093af6f47e162eee2bff2347315c5c
Reviewed-on: https://chromium-review.googlesource.com/939628
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Darren Krahn <dkrahn@chromium.org>

[modify] https://crrev.com/aac339cfdc67463b1defe88b330520fcae3660d2/cryptohome/tpm2_impl.cc
[modify] https://crrev.com/aac339cfdc67463b1defe88b330520fcae3660d2/cryptohome/attestation.cc
[modify] https://crrev.com/aac339cfdc67463b1defe88b330520fcae3660d2/cryptohome/mock_tpm.cc
[modify] https://crrev.com/aac339cfdc67463b1defe88b330520fcae3660d2/cryptohome/tpm_impl.cc
[modify] https://crrev.com/aac339cfdc67463b1defe88b330520fcae3660d2/cryptohome/tpm2_impl.h
[modify] https://crrev.com/aac339cfdc67463b1defe88b330520fcae3660d2/cryptohome/tpm_impl.h
[modify] https://crrev.com/aac339cfdc67463b1defe88b330520fcae3660d2/cryptohome/stub_tpm.h
[modify] https://crrev.com/aac339cfdc67463b1defe88b330520fcae3660d2/cryptohome/mock_tpm.h
[modify] https://crrev.com/aac339cfdc67463b1defe88b330520fcae3660d2/cryptohome/tpm.h

Project Member

Comment 20 by bugdroid1@chromium.org, Mar 21 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/aa81d1626b191acb2858c2d49ea442d72b3030bb

commit aa81d1626b191acb2858c2d49ea442d72b3030bb
Author: Maksim Ivanov <emaxx@google.com>
Date: Wed Mar 21 11:39:41 2018

cryptohome: Fix memory leaks in TPM 1.2 ScopedTssMemory usages

This fixes several instantiations of ScopedTssMemory to not leak the
allocated memory. They were leaking because the zero TSS_HCONTEXT was
provided to them, which was making the ScopedTssMemory destructor
effectively a no-op.

BUG= chromium:821825 ,chromium:806788
TEST=existing tests

Change-Id: I9bbf3f09f2151d72a456b9d5396f386bd9dc8fe3
Reviewed-on: https://chromium-review.googlesource.com/957722
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Will Drewry <wad@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/aa81d1626b191acb2858c2d49ea442d72b3030bb/cryptohome/tpm_impl.cc

Project Member

Comment 21 by bugdroid1@chromium.org, Mar 23 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/7cdb60353a78335e1b3c6db8384ffe475fc62d80

commit 7cdb60353a78335e1b3c6db8384ffe475fc62d80
Author: Maksim Ivanov <emaxx@google.com>
Date: Fri Mar 23 01:16:55 2018

cryptohome: Avoid killing "cryptohomeSOMETHING" on daemon stop

Currently, the init scripts prescribe to kill all processes
containing "cryptohome" as a substring whenever the cryptohomed
stops.

This CL changes this to kill only the "cryptohome"
command-line-interface process (i.e. switches onto exact matching).

BUG=chromium:806788
TEST=manual test:
     1. start TPM live tests, in the meantime restart cryptohomed
     and check that the live tests continue working.
     2. request a long operation using "cryptohome", in the meantime
     restart cryptohomed and check that the cryptohome process was
     killed.

Change-Id: Ib1546fa54d47e87543a948beaa47760e7576825f
Reviewed-on: https://chromium-review.googlesource.com/966603
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>

[modify] https://crrev.com/7cdb60353a78335e1b3c6db8384ffe475fc62d80/cryptohome/init/cryptohomed.service
[modify] https://crrev.com/7cdb60353a78335e1b3c6db8384ffe475fc62d80/cryptohome/init/cryptohomed-client.conf

Project Member

Comment 22 by bugdroid1@chromium.org, Mar 23 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/third_party/autotest/+/21c967a7d7e40a8f8b2b7fff08d08676b512936f

commit 21c967a7d7e40a8f8b2b7fff08d08676b512936f
Author: Maksim Ivanov <emaxx@google.com>
Date: Fri Mar 23 21:51:05 2018

cryptohome: Fix autotest's TPM own waiting

This fixes the "wait_for_ownership" feature of the take_tpm_ownership()
helper to not return preliminarily.

This could happen because the 'Owned' flag is actually set by
cryptohomed before the ownership tasks are completed. In other words,
this status response is entirely possible today, and was causing issues
with the old implementation:
  {'Ready': False,
   'Being Owned': True,
   'Password': '',
   'Enabled': True,
   'Owned': True}

The fix is to consider the 'Being Owned' flag too. This flag is released
by cryptohomed at the very end of the ownership procedure.

BUG=chromium:806788
TEST=none

Change-Id: I92947497b1cf21684ed1af0791167fac10f6bb0e
Reviewed-on: https://chromium-review.googlesource.com/976224
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/21c967a7d7e40a8f8b2b7fff08d08676b512936f/client/cros/cryptohome.py

Project Member

Comment 23 by bugdroid1@chromium.org, Mar 23 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/third_party/trousers/+/d7fa9879234533afab08f137e0f1efc36a5c17b9

commit d7fa9879234533afab08f137e0f1efc36a5c17b9
Author: Maksim Ivanov <emaxx@google.com>
Date: Fri Mar 23 21:50:46 2018

Trousers: Fix resource leakage in ScopedTss* objects

* ScopedTssObject (and all its template instantiations) was
  effectively always leaking the associated resource by forgetting
  to initialize the TSS_HCONTEXT.
* Replace silent resource cleanup ignoring when TSS_HCONTEXT is zero
  with NOTREACHED - i.e. log on leaking when under Release mode,
  and crash when under Debug mode.

BUG= chromium:821825 ,chromium:806788
TEST=existing tests

Change-Id: Ie2c45a20412af09b543869167007ad4ba08ac4ab
Reviewed-on: https://chromium-review.googlesource.com/959964
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/d7fa9879234533afab08f137e0f1efc36a5c17b9/src/include/trousers/scoped_tss_type.h

Project Member

Comment 24 by bugdroid1@chromium.org, Mar 29 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/c135ec41a6d435833cf05b5833c28035770dd355

commit c135ec41a6d435833cf05b5833c28035770dd355
Author: Maksim Ivanov <emaxx@google.com>
Date: Thu Mar 29 17:25:22 2018

cryptohome-dev-utils: Add missing dep on ecryptfs

Add ecryptfs into the cryptohome-dev-utils dependencies.

This is follow-up to the build issue reported at
https://chromium-review.googlesource.com/c/chromiumos/platform2/+/955283#message-eff0b17fe93bb4dbc1a8a5d67f37b0415987fb27

BUG=chromium:806788
TEST=existing test;
     manual test:
       emerge-${BOARD} -C sys-fs/ecryptfs-utils &&
       emerge-${BOARD} -a cryptohome-dev-utils

Change-Id: I8e4040c9e3de00e37e693d46bc715f7ab695ff5e
Reviewed-on: https://chromium-review.googlesource.com/982615
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/c135ec41a6d435833cf05b5833c28035770dd355/chromeos-base/cryptohome-dev-utils/cryptohome-dev-utils-9999.ebuild

Comment 25 by emaxx@chromium.org, Mar 29 2018

Blockedon: 827221
Project Member

Comment 26 by bugdroid1@chromium.org, Apr 7 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/671b8fcaf3354fe3c3ea3a42d7a63aeb04084093

commit 671b8fcaf3354fe3c3ea3a42d7a63aeb04084093
Author: Maksim Ivanov <emaxx@google.com>
Date: Sat Apr 07 05:00:10 2018

trunks: Fix regression_test's of trunks_client

This makes regression_test working again. These tests seem to have become
outdated comparing to the trunks implementation.

In detail:

* Fix crashes due to passing null algorithms to signing operation with
  generate_hash=true:
  * SignTest(),
  * PolicyAuthValueTest(),
  * PolicyAndTest(),
  * PolicyOrTest().
* Fix decryption failures due to passing null algorithms, as AsymmetricEncrypt()
  and AsymmetricDecrypt() have different defaults:
  * PolicyAuthValueTest(),
  * PolicyAndTest(),
  * PolicyOrTest(),
  * PerformRSAEncryptAndDecrypt().
* Fix use of the disabled ECC:
  * IdentityKeyTest().

BUG=chromium:806788
TEST=Run "trunks_client --regression_test" on a TPM 2.0 device (e.g. snappy)

Change-Id: I9258bb01e2e923842c3e42ad2f0bf5697b0c413c
Reviewed-on: https://chromium-review.googlesource.com/939466
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/671b8fcaf3354fe3c3ea3a42d7a63aeb04084093/trunks/trunks_client_test.cc

Project Member

Comment 27 by bugdroid1@chromium.org, Apr 12 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/9a949394698d42dec6417655ae2278a4bdd912b7

commit 9a949394698d42dec6417655ae2278a4bdd912b7
Author: Maksim Ivanov <emaxx@google.com>
Date: Thu Apr 12 01:09:02 2018

cryptohome: Prepare Tpm class for TPM 1.2 sign-sealing

This CL does some preparation work for the implementation of
signature-protected sealing with TPM 1.2:

* Allow creating PCR-bound delegate;
* Allow creating delegate with custom labels;
* Add interface method for creating policy object with random password;
* Add interface method for loading the RSA public key into Trousers;
* Make some of TpmImpl private methods public;

No change of functionality is expected after this CL.

BUG=chromium:806788
TEST=TPM live tests

Change-Id: Ia29e687b0930ea1854bf8b9aeb62e1bd732f19d8
Reviewed-on: https://chromium-review.googlesource.com/968847
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/9a949394698d42dec6417655ae2278a4bdd912b7/cryptohome/tpm2_impl.cc
[modify] https://crrev.com/9a949394698d42dec6417655ae2278a4bdd912b7/cryptohome/attestation.cc
[modify] https://crrev.com/9a949394698d42dec6417655ae2278a4bdd912b7/cryptohome/mock_tpm.cc
[modify] https://crrev.com/9a949394698d42dec6417655ae2278a4bdd912b7/cryptohome/tpm_impl.cc
[modify] https://crrev.com/9a949394698d42dec6417655ae2278a4bdd912b7/cryptohome/tpm2_impl.h
[modify] https://crrev.com/9a949394698d42dec6417655ae2278a4bdd912b7/cryptohome/tpm_impl.h
[modify] https://crrev.com/9a949394698d42dec6417655ae2278a4bdd912b7/cryptohome/stub_tpm.h
[modify] https://crrev.com/9a949394698d42dec6417655ae2278a4bdd912b7/cryptohome/mock_tpm.h
[modify] https://crrev.com/9a949394698d42dec6417655ae2278a4bdd912b7/cryptohome/tpm.h

Project Member

Comment 28 by bugdroid1@chromium.org, Apr 12 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/848dc7860bee992758c371f090cdbfedb520b1e9

commit 848dc7860bee992758c371f090cdbfedb520b1e9
Author: Maksim Ivanov <emaxx@google.com>
Date: Thu Apr 12 17:01:01 2018

cryptohome: Prepare CryptoLib class for TPM 1.2 sign-sealing

This CL does some preparation work for the implementation of
signature-protected sealing with TPM 1.2:
* Add a method for decrypting from RSA OAEP with custom label.

No change of functionality is expected after this CL.

BUG=chromium:806788
TEST=new unit tests: "CryptoLib*"

Change-Id: I6d1c624b19db3bac4150242d5fe9a839448f9920
Reviewed-on: https://chromium-review.googlesource.com/968848
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[add] https://crrev.com/848dc7860bee992758c371f090cdbfedb520b1e9/cryptohome/cryptolib_unittest.cc
[modify] https://crrev.com/848dc7860bee992758c371f090cdbfedb520b1e9/cryptohome/cryptolib.cc
[modify] https://crrev.com/848dc7860bee992758c371f090cdbfedb520b1e9/cryptohome/cryptohome.gyp
[modify] https://crrev.com/848dc7860bee992758c371f090cdbfedb520b1e9/cryptohome/cryptolib.h

Project Member

Comment 29 by bugdroid1@chromium.org, Apr 16 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/d9f219f4362023533c9256d5599c93a5f7dbd87c

commit d9f219f4362023533c9256d5599c93a5f7dbd87c
Author: Maksim Ivanov <emaxx@google.com>
Date: Mon Apr 16 16:20:40 2018

cryptohome: Minor improv for TPM2 signature sealing

* Persist the list of bound PCR indexes;
* Safe cast of PCR indexes;
* Use std::make_unique instead of base::MakeUnique;

BUG=chromium:806788
TEST=unit tests: Tpm2RsaSignatureSecretSealingTest.*;
     TPM live tests: cryptohome-tpm-live-test

Change-Id: Ia95580a592ec544bd38a093999569fcfc23142fe
Reviewed-on: https://chromium-review.googlesource.com/999518
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/d9f219f4362023533c9256d5599c93a5f7dbd87c/cryptohome/signature_sealing_backend_tpm2_impl.h
[modify] https://crrev.com/d9f219f4362023533c9256d5599c93a5f7dbd87c/cryptohome/tpm_live_test.cc
[modify] https://crrev.com/d9f219f4362023533c9256d5599c93a5f7dbd87c/cryptohome/signature_sealing_backend.h
[modify] https://crrev.com/d9f219f4362023533c9256d5599c93a5f7dbd87c/cryptohome/tpm2_test.cc
[modify] https://crrev.com/d9f219f4362023533c9256d5599c93a5f7dbd87c/cryptohome/signature_sealing_backend_tpm2_impl.cc
[modify] https://crrev.com/d9f219f4362023533c9256d5599c93a5f7dbd87c/cryptohome/signature_sealed_data.proto

Project Member

Comment 30 by bugdroid1@chromium.org, Apr 24 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/782a793f4dcc20643502078d4d07823972332e33

commit 782a793f4dcc20643502078d4d07823972332e33
Author: Maksim Ivanov <emaxx@google.com>
Date: Tue Apr 24 13:22:37 2018

cryptohome: Make MountEx two-phased - gen credentials first

Split the MountEx worker job (DoMountEx) into two functions. The first
function only does some input parameters validation and builds the
credentials object, while all state-depending and state-changing mount
operations are moved into the second function.

Both parts are still executed synchronously currently - in order to
preserve the previous semantics of MountEx, which was to work on the
worker thread as a *single* job, which implies that the order of
operations was preserved.

This is preparation for challenge-response based credentials
implementation, for which the credentials object construction will be an
asynchronous operation (involving non-blocking inter-process requests).
The split made in this CL allows to avoid side effects of state changing
during interleaving MountEx and other operations.

BUG=chromium:806788
TEST=existing tests

Change-Id: I311720b38c0e75a0c44a33abf49450db618ca1ac
Reviewed-on: https://chromium-review.googlesource.com/1019406
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Ryo Hashimoto <hashimoto@chromium.org>

[modify] https://crrev.com/782a793f4dcc20643502078d4d07823972332e33/cryptohome/service.h
[modify] https://crrev.com/782a793f4dcc20643502078d4d07823972332e33/cryptohome/service.cc
[modify] https://crrev.com/782a793f4dcc20643502078d4d07823972332e33/cryptohome/service_unittest.cc

Comment 31 by emaxx@chromium.org, Apr 25 2018

Blockedon: 836774

Comment 32 by emaxx@chromium.org, Apr 26 2018

Blockedon: 837253
Project Member

Comment 33 by bugdroid1@chromium.org, Apr 26 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/ce1d3b3b6e6076d4d8f0c7bed1e93e435b2d40cd

commit ce1d3b3b6e6076d4d8f0c7bed1e93e435b2d40cd
Author: Maksim Ivanov <emaxx@google.com>
Date: Thu Apr 26 20:01:33 2018

cryptohome: Use uint32_t for PCR indexes

As a follow-up to discussion at [1], changing the existing code
to use the unsigned fixed-size type instead of int for PCR indexes.

[1] https://chromium-review.googlesource.com/c/chromiumos/platform2/+/999518/2/cryptohome/signature_sealing_backend_tpm2_impl.cc#53

BUG=chromium:806788
TEST=existing tests

Change-Id: I96b6a06114439431b460199ae87ec318b158adb5
Reviewed-on: https://chromium-review.googlesource.com/1007279
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/ce1d3b3b6e6076d4d8f0c7bed1e93e435b2d40cd/cryptohome/tpm_live_test.cc
[modify] https://crrev.com/ce1d3b3b6e6076d4d8f0c7bed1e93e435b2d40cd/cryptohome/tpm2_impl.cc
[modify] https://crrev.com/ce1d3b3b6e6076d4d8f0c7bed1e93e435b2d40cd/cryptohome/attestation.cc
[modify] https://crrev.com/ce1d3b3b6e6076d4d8f0c7bed1e93e435b2d40cd/cryptohome/attestation.h
[modify] https://crrev.com/ce1d3b3b6e6076d4d8f0c7bed1e93e435b2d40cd/cryptohome/tpm_impl.cc
[modify] https://crrev.com/ce1d3b3b6e6076d4d8f0c7bed1e93e435b2d40cd/cryptohome/tpm2_impl.h
[modify] https://crrev.com/ce1d3b3b6e6076d4d8f0c7bed1e93e435b2d40cd/cryptohome/tpm_impl.h
[modify] https://crrev.com/ce1d3b3b6e6076d4d8f0c7bed1e93e435b2d40cd/cryptohome/stub_tpm.h
[modify] https://crrev.com/ce1d3b3b6e6076d4d8f0c7bed1e93e435b2d40cd/cryptohome/bootlockbox/boot_lockbox.cc
[modify] https://crrev.com/ce1d3b3b6e6076d4d8f0c7bed1e93e435b2d40cd/cryptohome/mock_tpm.h
[modify] https://crrev.com/ce1d3b3b6e6076d4d8f0c7bed1e93e435b2d40cd/cryptohome/tpm2_test.cc
[modify] https://crrev.com/ce1d3b3b6e6076d4d8f0c7bed1e93e435b2d40cd/cryptohome/tpm.h

Project Member

Comment 34 by bugdroid1@chromium.org, Apr 26 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/7975060ee525ec37b237344bc64393f5226199c9

commit 7975060ee525ec37b237344bc64393f5226199c9
Author: Maksim Ivanov <emaxx@google.com>
Date: Thu Apr 26 20:01:49 2018

attestation: Use uint32_t for PCR indexes

As a follow-up to discussion at [1], changing the existing code
to use the unsigned fixed-size type instead of int for PCR indexes.

[1] https://chromium-review.googlesource.com/c/chromiumos/platform2/+/999518/2/cryptohome/signature_sealing_backend_tpm2_impl.cc#53

BUG=chromium:806788
TEST=existing tests

Change-Id: Icb54928ff1f585e7d2d8b26407607bd792766717
Reviewed-on: https://chromium-review.googlesource.com/1007665
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/7975060ee525ec37b237344bc64393f5226199c9/attestation/common/tpm_utility_v1.cc
[modify] https://crrev.com/7975060ee525ec37b237344bc64393f5226199c9/attestation/common/tpm_utility_v1.h
[modify] https://crrev.com/7975060ee525ec37b237344bc64393f5226199c9/attestation/common/tpm_utility.h
[modify] https://crrev.com/7975060ee525ec37b237344bc64393f5226199c9/attestation/common/tpm_utility_v2.h
[modify] https://crrev.com/7975060ee525ec37b237344bc64393f5226199c9/attestation/common/tpm_utility_v2.cc
[modify] https://crrev.com/7975060ee525ec37b237344bc64393f5226199c9/attestation/server/attestation_service.cc
[modify] https://crrev.com/7975060ee525ec37b237344bc64393f5226199c9/attestation/common/mock_tpm_utility.h
[modify] https://crrev.com/7975060ee525ec37b237344bc64393f5226199c9/attestation/server/attestation_service.h

Project Member

Comment 35 by bugdroid1@chromium.org, Apr 26 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/5cbf5b43cdf8e3fbe18f90c26be11ef7376a58a5

commit 5cbf5b43cdf8e3fbe18f90c26be11ef7376a58a5
Author: Maksim Ivanov <emaxx@google.com>
Date: Thu Apr 26 20:01:47 2018

cryptohome: Vault keyset for challenge-response protection

Extend the SerializedVaultKeyset protobuf message for holding
required information when signature challenge protection is used.

No change of behavior in this CL - the code for creating and
loading such vault keysets will be added later.

BUG=chromium:806788
TEST=none (existing tests)

Change-Id: Ifb37ea389dfe4a37bad20dbd20ecdaa493c83f90
Reviewed-on: https://chromium-review.googlesource.com/1027090
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Ryo Hashimoto <hashimoto@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/5cbf5b43cdf8e3fbe18f90c26be11ef7376a58a5/cryptohome/vault_keyset.proto

Project Member

Comment 36 by bugdroid1@chromium.org, Apr 27 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/d08b0b6313366ed455d9785a7b8ed9b30be81762

commit d08b0b6313366ed455d9785a7b8ed9b30be81762
Author: Maksim Ivanov <emaxx@google.com>
Date: Fri Apr 27 19:22:42 2018

cryptohome: Signature-protected sealing with TPM 1.2

Implement signature-protected sealing mechanism for TPM 1.2,
which is based on the Certified Migratable Key (CMK) feature.

This implementation lacks the optimization of pre-generating the
migration destination RSA key in background before the unsealing
operation. This will be addressed in a future CL.

BUG=chromium:806788
TEST=TPM live tests

Change-Id: I36bdab4430a558fe81a2ce2357738d6a8a9d81df
Reviewed-on: https://chromium-review.googlesource.com/958162
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Mattias Nissler <mnissler@chromium.org>

[modify] https://crrev.com/d08b0b6313366ed455d9785a7b8ed9b30be81762/cryptohome/cryptohome-libs.gypi
[modify] https://crrev.com/d08b0b6313366ed455d9785a7b8ed9b30be81762/cryptohome/tpm_impl.cc
[add] https://crrev.com/d08b0b6313366ed455d9785a7b8ed9b30be81762/cryptohome/signature_sealing_backend_tpm1_impl.cc
[modify] https://crrev.com/d08b0b6313366ed455d9785a7b8ed9b30be81762/cryptohome/tpm_impl.h
[add] https://crrev.com/d08b0b6313366ed455d9785a7b8ed9b30be81762/cryptohome/signature_sealing_backend_tpm1_impl.h
[modify] https://crrev.com/d08b0b6313366ed455d9785a7b8ed9b30be81762/cryptohome/signature_sealed_data.proto

Project Member

Comment 37 by bugdroid1@chromium.org, Apr 28 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform/system_api/+/d45ce7d902326cfba54645205c29d30ab8aabdb6

commit d45ce7d902326cfba54645205c29d30ab8aabdb6
Author: Maksim Ivanov <emaxx@google.com>
Date: Sat Apr 28 04:27:34 2018

cryptohome: Delete obsolete challenge-response APIs

* Delete the KeyChallenge signal and the RespondKeyChallenge method.
  After new discussions, this has been decided to be replaced with a
  different approach.
* As a consequence, delete proto fields that contained the request
  identifiers - these should be unnecessary with the new APIs.

BUG=chromium:806788
TEST=none

Change-Id: I0ffabd8f7354a96f0856b6d13d0c902d449e05a7
Reviewed-on: https://chromium-review.googlesource.com/1030378
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Dan Erat <derat@chromium.org>

[modify] https://crrev.com/d45ce7d902326cfba54645205c29d30ab8aabdb6/dbus/cryptohome/rpc.proto
[modify] https://crrev.com/d45ce7d902326cfba54645205c29d30ab8aabdb6/dbus/cryptohome/dbus-constants.h

Project Member

Comment 38 by bugdroid1@chromium.org, May 2 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/f50ec003a14c985cc60e61b3e7acfab44811c8c5

commit f50ec003a14c985cc60e61b3e7acfab44811c8c5
Author: Ryo Hashimoto <hashimoto@chromium.org>
Date: Wed May 02 11:31:07 2018

Roll src/third_party/cros_system_api/ 43880122c..d45ce7d90 (2 commits)

https://chromium.googlesource.com/chromiumos/platform/system_api.git/+log/43880122c4f3..d45ce7d90232

$ git log 43880122c..d45ce7d90 --date=short --no-merges --format='%ad %ae %s'
2018-04-26 emaxx cryptohome: Delete obsolete challenge-response APIs
2018-04-19 hashimoto Add constants for ArcAppFuseProvider

Created with:
  roll-dep src/third_party/cros_system_api

BUG= 837161 
BUG=806788

Change-Id: I31ebc9bd3b5338fcd69a61848054ab50ec0d63b7
Reviewed-on: https://chromium-review.googlesource.com/1039306
Reviewed-by: Hidehiko Abe <hidehiko@chromium.org>
Commit-Queue: Ryo Hashimoto <hashimoto@chromium.org>
Cr-Commit-Position: refs/heads/master@{#555351}
[modify] https://crrev.com/f50ec003a14c985cc60e61b3e7acfab44811c8c5/DEPS

Project Member

Comment 39 by bugdroid1@chromium.org, May 3 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/7db63eca53beb0816542468d050b6cf520b7b1eb

commit 7db63eca53beb0816542468d050b6cf520b7b1eb
Author: Maksim Ivanov <emaxx@google.com>
Date: Thu May 03 05:20:55 2018

cryptohome: Delete obsolete challenge-response APIs

Delete the KeyChallenge signal and the RespondKeyChallenge method. After
new discussions, this has been decided to be replaced with a different
approach.

BUG=chromium:806788
TEST=none

Change-Id: I22f19a055448ac2b65745f36a5b808e4c407f4eb
Reviewed-on: https://chromium-review.googlesource.com/1030377
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Ryo Hashimoto <hashimoto@chromium.org>

[modify] https://crrev.com/7db63eca53beb0816542468d050b6cf520b7b1eb/cryptohome/service.h
[modify] https://crrev.com/7db63eca53beb0816542468d050b6cf520b7b1eb/cryptohome/service.cc
[modify] https://crrev.com/7db63eca53beb0816542468d050b6cf520b7b1eb/cryptohome/interface.cc
[modify] https://crrev.com/7db63eca53beb0816542468d050b6cf520b7b1eb/cryptohome/dbus_bindings/org.chromium.CryptohomeInterface.xml
[modify] https://crrev.com/7db63eca53beb0816542468d050b6cf520b7b1eb/cryptohome/interface.h

Project Member

Comment 40 by bugdroid1@chromium.org, May 12 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/93f94c2bfbdc7626a76493a795212f139a67254a

commit 93f94c2bfbdc7626a76493a795212f139a67254a
Author: Maksim Ivanov <emaxx@google.com>
Date: Sat May 12 06:22:27 2018

cryptohome: D-Bus API for challenge-response keys

Add the D-Bus Interface XML file for the delegate operations. Currently,
the interface contains a single method - ChallengeKey - which will be
called by cryptohomed during authentication with challenge-response
keys. The interface, in production usage, will be implemented by the
browser process.

Also add the GYP target for the auto generation of D-Bus GLib client
headers.

BUG=chromium:806788
TEST=none (behind successful compilation of cryptohome)

Change-Id: I5a00bb2d13abe018a5fb30d2f3550ed77d242dfa
Reviewed-on: https://chromium-review.googlesource.com/1039568
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Dan Erat <derat@chromium.org>

[modify] https://crrev.com/93f94c2bfbdc7626a76493a795212f139a67254a/cryptohome/cryptohome-libs.gypi
[add] https://crrev.com/93f94c2bfbdc7626a76493a795212f139a67254a/cryptohome/dbus_bindings/org.chromium.CryptohomeKeyDelegateInterface.xml

Project Member

Comment 41 by bugdroid1@chromium.org, May 12 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform/system_api/+/e62110ce76ac311a325adccedae412c35ef26adc

commit e62110ce76ac311a325adccedae412c35ef26adc
Author: Maksim Ivanov <emaxx@google.com>
Date: Sat May 12 14:20:01 2018

cryptohome: Pass D-Bus delegate for challenge keys

1. Pass D-Bus service name and object path as part of
authorization request data. This allows cryptohome to make
challenge requests to this key delegate service for
challenge-response keys.
2. Add constants for the D-Bus interface of the key delegate.

Note that this CL does *not* add passing of the delegate for
other request protobufs, like mount or add key request, because
it won't be used for the current implementation of
challenge-response keys - it will be a requirement to always use
such keys as the authorization keys. But this may be changed in
the future - for example, in order to support combining the
challenge-response key with another key.

BUG=chromium:806788
TEST=none

Change-Id: I5a7f7a88ae3781817d934600b4a0733ccd723150
Reviewed-on: https://chromium-review.googlesource.com/1046205
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Ryo Hashimoto <hashimoto@chromium.org>

[modify] https://crrev.com/e62110ce76ac311a325adccedae412c35ef26adc/dbus/cryptohome/rpc.proto
[modify] https://crrev.com/e62110ce76ac311a325adccedae412c35ef26adc/dbus/cryptohome/dbus-constants.h

Comment 42 by emaxx@chromium.org, May 14 2018

Blockedon: 842791
Project Member

Comment 43 by bugdroid1@chromium.org, May 25 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform2/+/826ecf6ff61c1baf825645ee631187f80321e7e0

commit 826ecf6ff61c1baf825645ee631187f80321e7e0
Author: Maksim Ivanov <emaxx@google.com>
Date: Fri May 25 06:14:14 2018

cryptohome: Bind TPM 1.2 delegate to PCR0

Make the TPM 1.2 delegate be bound to PCR0. This will act as
an additional measure of protection against switches between
verified and dev modes, as this results in the change of PCR
number 0.

The exact effect is that if the current PCR0 value is
different from the one when the delegate was created, such
operations like the attestation or the migration of a CMK
(Certified Migratable Key) will stop working.

BUG=chromium:806788
TEST=existing tests

Change-Id: Id347b911d102e6bf2795441e326e8ee2a427e114
Reviewed-on: https://chromium-review.googlesource.com/1065826
Commit-Ready: Maksim Ivanov <emaxx@chromium.org>
Tested-by: Maksim Ivanov <emaxx@chromium.org>
Reviewed-by: Andrey Pronin <apronin@chromium.org>

[modify] https://crrev.com/826ecf6ff61c1baf825645ee631187f80321e7e0/cryptohome/attestation.cc

Labels: LUCI-Clients
Labels: -LUCI-Clients
Components: OS>Systems>Security

Sign in to add a comment