HPKE 개요
하이브리드 공개 키 암호화 (HPKE)는 공개 키로 페이로드를 암호화하는 데 사용되는 암호화 메커니즘입니다. 페이로드 자체가 대칭 키로 암호화되고 HPKE가 디피-헬만 키 교환을 사용하여 이 대칭 키를 파생시키기 때문에 '하이브리드'라고 합니다.
HPKE 모드
- 기본: 가장 일반적인 모드입니다.
- 인증: 인증에 발신자의 비공개 키를 사용합니다.
- PSK: 인증에 사전 공유된 높은 엔트로피 키를 사용합니다.
- AuthPSK: 인증을 위해 발신자의 비공개 키와 사전 공유된 높은 엔트로피 키를 결합합니다.
기본 모드 상호작용 (기기 및 발급 기관)
기기에서 발급 기관에 민감한 데이터를 전송하려는 시나리오를 보여주는 대략적인 흐름은 다음과 같습니다.
1단계: 키 생성 및 교환
- 발급 기관은 암호화 키 쌍
IE₍ₚₖ, ₛₖ₎을 만듭니다. 여기서 ₚₖ는 공개 키이고 ₛₖ는 비공개 키입니다. - 발급 기관은 공개 키 (
IEₚₖ)를 기기에 전송하고 공유합니다.
2단계: 암호화 및 전송
기기가 Hybrid-Encrypt(Data, IEₚₖ, Context)를 실행합니다.
- 기기에서 암호화를 위한 임시 비대칭 키 쌍을 생성합니다(
₍Eₚₖ, Eₛₖ₎). SS = ExtractAndExpand(Diffie-Hellman(IEₚₖ, Eₛₖ), _Context)공식을 사용하여 공유 보안 비밀 (SS)이라고 하는 대칭 AES 키를 파생합니다.- 기기는 이 공유 보안 비밀을 사용하여 데이터를 암호화하여
encData를 생성합니다. { encData, Eₚₖ }를 공유하고 발급 기관에 전송합니다.
3단계: 복호화
발급 기관은 현재 IE₍ₚₖ, ₛₖ₎ 및 수신된 { encData, Eₚₖ }를 보유하고 있습니다. Hybrid-Decrypt(encData, Eₚₖ, IEₛₖ, Context)를 실행합니다.
SS = ExtractAndExpand(Diffie-Hellman(IEₛₖ, Eₚₖ), _Context)공식을 사용하여 대칭 AES 키 (공유 보안 비밀, SS)를 파생합니다.- SS를 사용하여
encData을 복호화합니다.
용어
| 용어 | 정의 및 세부정보 |
|---|---|
| DIₚₖ | 인증 키 인증서 체인 (기기 ID 인증서): 인증서를 발급 기관에 식별하는 CredentialKey의 X.509 인증서 체인입니다.
|
| Aₚₖ | 인증 키: 인증이 필요하고 CredentialKey로 서명된 동적 X.509 인증 키입니다.
|
| IE₍ₛₖ,ₚₖ₎ | 발급자 암호화 키 쌍: 발급자가 생성한 비대칭 키입니다. 기기는 이 키를 사용하여 발급자에게 하이브리드 암호화를 실행합니다. |
| II₍ₛₖ,ₚₖ₎ | 발급자 ID 키 쌍: 발급자가 생성한 비대칭 키입니다. 기기는 이 키를 사용하여 발급자의 ID를 확인합니다. |
| DE₍ₛₖ,ₚₖ₎ | 기기 암호화 키 쌍: 요청에 따라 기기에서 생성된 일시적인 비대칭 키입니다. 발급자는 이 키를 사용하여 기기에 하이브리드 암호화를 실행합니다. |
| FE₍ₛₖ,ₚₖ₎ | 필드 암호화 키: 하이브리드 암호화 중에 필드별로 생성되는 임시 비대칭 키입니다. |
Google 디지털 사용자 인증 정보 프로비저닝 API의 E2EE
1단계: 발급자 ID 키 및 암호화 키 가져오기
- API 엔드포인트:
/getIdentityKey,/getHybridEncryptionKey - 반환:
IIₚₖ,IEₚₖ.
2단계: 기기 등록 nonce 가져오기
- 기기 참조 ID (
deviceReferenceId)를 생성합니다. - API 엔드포인트:
/getDeviceRegistrationNonce(deviceReferenceId)호출 - 반환:
nonce
3단계: 기기 등록
- Android ID 사용자 인증 정보를 설정합니다.
- nonce가 삽입된
DIₚₖ을 반환하는IC.getCredentialKeyCertificateChain(nonce)를 호출합니다. - API 엔드포인트:
/registerDevice(deviceReferenceId, DIₚₖ)호출 - 발급 기관은 이 인증서 체인을 주의 깊게 검사하여 루트 인증서가 잘 알려져 있고, 챌린지가 있으며,
ATTESTATION_APPLICATION_ID가 예상 앱과 일치하고, 확인된 부팅이 사용 설정되어 있으며, 서명 또는 취소가 유효한지 확인해야 합니다. - 반환:
ack
4a단계: 교정 요청 보내기
- 각 필드에 대해 다음을 수행합니다.
Hybrid-Encrypt(Data, IEₚₖ, Context=FieldName)를 실행하여encData및FEₚₖ를 생성합니다.IC.proveOwnership(SHA-256(Data + IEₚₖ))를 호출하여sigData(CredentialKey로 서명되고 페이로드가 ProofofOwnership으로 설정된 COSE_Sign1 데이터 구조)을 가져옵니다.
- API 엔드포인트:
/proofUser([encData, sigData, FEₚₖ])호출 - 발급 기관은
DIₚₖ을 사용하여sigData를 확인합니다. - 발급 기관은
Hybrid-Decrypt(encData, FEₚₖ, IEₛₖ, Context=FieldName)를 실행하여Data를 생성합니다. - 반환:
ack
4b단계: 교정 상태 업데이트
deviceReferenceId및proofingId을 사용하여 교정 상태 업데이트를 Google에 알립니다.- API 엔드포인트:
/notifyProofingStatusUpdateAvailable(...)호출 - Google 서버는
/getProofingStatus(deviceReferenceId, proofingId)를 호출하여 발급자로부터 증빙 상태를 가져옵니다.
5단계: 사용자 인증 정보 프로비저닝
IC.proveOwnership(SHA-256(DEₚₖ))를 호출하여sigDEₚₖ(페이로드 ProofofOwnership으로 CredentialKey/DIₛₖ로 서명된 COSE_Sign1 구조)을 가져옵니다.- API 엔드포인트:
/provisionCredential(dRId, pId, cId, DEₚₖ, sigDEₚₖ)를 통해 발급자에게deviceReferenceId,proofingId,credentialId,sigDEₚₖ를 전송합니다. - 발급기관 측:
DIₚₖ으로sigDEₚₖ를 확인합니다.- 사용자 인증 정보 (PersonalizationData + AccessControlProfiles)를 암호화합니다.
Hybrid-Encrypt(Cred, DEₚₖ, Context=FieldName)를 실행하여encCred및FEₚₖ를 생성합니다.IIₛₖ으로 COSE_Sign1 SHA-256(Cred + DEₚₖ)에 서명하여sigCred생성encCred,sigCred,FEₚₖ반환
- 기기 측:
IIₚₖ을 사용하여sigCred를 확인합니다.Hybrid-Decrypt(encCred, FEₚₖ, DEₛₖ, Context=FieldName)를 실행하여Cred를 추출합니다.WC.personalize(Cred)를 호출하여sigCredReceipt(CredentialKey로 서명된 COSE_Sign1, 페이로드 ProofOfProvisioning)을 가져옵니다.encReceipt및FE1ₚₖ를 생성하는Hybrid-Encrypt(sigCredReceipt, DEₛₖ, Context=FieldName)를 실행합니다.IC.proveOwnership(SHA-256(encReceipt + IEₚₖ))를 호출하여sigReceipt(CredentialKey로 서명된 COSE_Sign1, 페이로드 ProofofOwnership)을 가져옵니다.- 인증 키 생성[
Aₚₖ]
6단계: MSO 및 StaticAuthData 생성
- 기기 측:
- 각 인증 키의 경우
Hybrid-Encrypt(AuthKey, IEₚₖ, Context=FieldName)를 실행하여encAuthKey및FEₚₖ를 생성합니다. IC.proveOwnership(SHA-256(AuthKey + IEₚₖ))을 호출하여sigAuthKey을 가져옵니다.- API 엔드포인트:
/provisionMSOs(.., encReceipt, sigReceipt, [encAuthKey, sigAuthKey, FEₚₖ], DEₚₖ, sigDEₚₖ)호출
- 각 인증 키의 경우
- 발급기관 측:
DIₚₖ를 기준으로sigReceipt및sigDEₚₖ를 확인하여 수신을 확인합니다.- 각
[encAuthKey, sigAuthKey, FEₚₖ]에 대해Hybrid-Decrypt(encAuthKey, FEₚₖ, IEₛₖ, Context=FieldName)를 실행하여AuthKey를 추출합니다. - MSO (AuthKey 포함)를 생성하고 digestIdMapping 및 issuerAuth를 포함한 staticAuthData (SAD)를 생성합니다.
Hybrid-Encrypt(SAD, DEₚₖ, Context=FieldName)를 실행하여encSAD및FEₚₖ를 생성합니다.IIₛₖ를 사용하여 COSE_Sign1 SHA-256(SAD + DEₚₖ)으로 서명하여sigSAD를 생성합니다.[encSAD, sigSAD, FEₚₖ]를 반환합니다.
- 기기 측 (최종):
- 반환된 각
encSAD, sigSAD, FEₚₖ에 대해IIₚₖ로sigSAD를 확인합니다. Hybrid-Decrypt(encSAD, FEₚₖ, DEₛₖ, Context=FieldName)를 실행하여SAD를 추출합니다.SAD로storeStaticAuthenticationData에 전화하여 프로세스를 완료합니다.
- 반환된 각
순환 요구사항
발급자 ID 키는 1년에 한 번 순환해야 합니다. 교체 기간 동안 발급자는 이전 키와 새 키를 호스팅해야 하며 기기는 이러한 키를 모두 신뢰합니다. 발급자가 새 발급자 ID 키를 사용하는 것으로 완전히 전환되면 발급자는 이전 키 호스팅을 중지해야 하며 기기는 더 이상 이를 신뢰하지 않습니다.
발급자 하이브리드 암호화 키는 3개월에 한 번 순환해야 합니다. 순환 기간 동안 발급자는 새 키만 호스팅하기 시작해야 하고 기기는 새 키로 암호화하기 시작합니다. 발급자는 다운타임을 방지하기 위해 적절한 기간 동안 이전 키와 새 키를 모두 사용하여 복호화를 지원해야 합니다.
AAD 값
AAD에 다음 컨텍스트 값을 사용합니다.
| 필드 | 컨텍스트 값 |
|---|---|
| preAuthorizationCode | PreAuthorizationCode |
다른 증빙 유형의 AAD 값은 Google 담당자에게 문의하세요.
디지털 사용자 인증 정보 엔드 투 엔드 암호화 테스트 벡터
디지털 ID 엔드 투 엔드 암호화의 테스트 벡터는 암호화 알고리즘의 정확성을 테스트하는 데 사용되는 사전 정의된 메시지와 암호화된 버전의 집합입니다.
HPKE 암호화 매개변수:
KEM = DHKEM(P-256, HKDF-SHA256), id = 0x0010 KDF = HKDF-SHA256, id = 0x0001 AEAD = AES-256-GCM, id = 0x0002
- 추가 연결 데이터 (AAD)는 HPKE CtxInfo의 입력이며, AES (대칭) 암호화의 AAD는 NULL (비어 있음)입니다.
- JSON 구조의 바이너리 데이터는 Base64로 인코딩되고 이 문서의 중간 값은 16진수로 인코딩됩니다.
- 이 문서의 서명 형식:
- 기기 → 발급기관, 발급기관 → 기기:
COSE_Sign1
- 기기 → 발급기관, 발급기관 → 기기:
클라이언트 → 발급자, 발급자 → 클라이언트
양방향 통신 샘플
샘플 암호화된 요청 필드
일반 텍스트 = 'Hello, world!', 연결된 데이터 = 'field1'
{
"field1": {
"encryptedValue": "yGFWT9MkgV6/IZfYUZjqGEf3k2M/HQhz9XnKWyI\u003d",
"encapsulatedKey": "BOpBC2LGh1RWk99iIm6ISsaPbtrNnu9hIgHeby5khXY6PG+ZmDOYmorEUne7uzhDmD6JCVYyME1+A8ueJ0CZvAI\u003d",
"signature": "hEOhASagWE+EcFByb29mT2ZPd25lcnNoaXB4GG9yZy5pc28uMTgwMTMtNS4yMDE5Lm1kbFggTOsHXzsgDgh/2chekltve8rJsFFb6DTtBjY98H58gjb0WEBUnwNT3gvbavE8QoaAKaELqF7JKqh0+ivPisQg6RerTmx8Zsk/tCjW/y1cxhGKatl2EjASemns67r1/lZumEqZ",
"recipientKeyId": "4D7E5D8B9460810A"
}
}자세히 알아보기:
>> plaintext = "Hello, world!" 48656C6C6F2C20776F726C6421 >> associated-data = "field1" 6669656C6431 ## AES key = 2831F07355FEAB3A8654EADEEC2E2D497B9FD3C76CB8B5E776DB03583F302332 ## AES initialization vector = 64620929032C85B352156528 ## AES associated data (empty) = >> encrypted-value = HPKE(plaintext, associated-data) C861564FD324815EBF2197D85198EA1847F793633F1D0873F579CA5B22 >> encapsulated-key (ephemeral) = 04EA410B62C687545693DF62226E884AC68F6EDACD9EEF612201DE6F2E648576 3A3C6F999833989A8AC45277BBBB3843983E89095632304D7E03CB9E274099BC 02 >> tbs-data = plaintext || issuer-encryption-key 48656C6C6F2C20776F726C6421044F1FC726AFFFC32EAA1275B5B49D67018ADE 7D8599DE53FE049996C0EC45D26EA3375BF467B631CF8AB0F284E4B628E287C8 99107465529DCA93DCF5F7A7EA5F >> sha-256(tbs-data) 4CEB075F3B200E087FD9C85E925B6F7BCAC9B0515BE834ED06363DF07E7C8236 >> proof-of-ownership (cbor array) 847050726F6F664F664F776E65727368697078186F72672E69736F2E31383031 332D352E323031392E6D646C58204CEB075F3B200E087FD9C85E925B6F7BCAC9 B0515BE834ED06363DF07E7C8236F4 >> signature (cose_sign1) 8443A10126A0584F847050726F6F664F664F776E65727368697078186F72672E 69736F2E31383031332D352E323031392E6D646C58204CEB075F3B200E087FD9 C85E925B6F7BCAC9B0515BE834ED06363DF07E7C8236F45840549F0353DE0BDB 6AF13C42868029A10BA85EC92AA874FA2BCF8AC420E917AB4E6C7C66C93FB428 D6FF2D5CC6118A6AD9761230127A69ECEBBAF5FE566E984A99
샘플 발급자 또는 기기 암호화 키
{
"deviceEncryptionKey": {
"publicKey": "BP5vgzZ+UTozzb6cmaZ8tkof2nh2Q2oHVAsggvc8V8SR6C9wWU6W9JEq0AmsGbou3jYw4BLftJP2XQeCB3uD/to\u003d",
"signature": "hEOhASagWE+EcFByb29mT2ZPd25lcnNoaXB4GG9yZy5pc28uMTgwMTMtNS4yMDE5Lm1kbFgg7641tE2UhuT5Tw9p1u9yEDpyYzDf1Jf9m//mIQfd4Kf0WEBB7PvHbfWozCYlFUqMJ6x+QWzoUU/OT10F1J1zoB8MTELPqfC9acF6IX5oMmsgLn2RtPS7QfylRqEAfG0FyYli",
"keyIdentifier": "F29BA6298BC93156D2D50EA7E2233FC4"
}
}자세히 알아보기:
>> ec-point 04FE6F83367E513A33CDBE9C99A67CB64A1FDA7876436A07540B2082F73C57C4 91E82F70594E96F4912AD009AC19BA2EDE3630E012DFB493F65D0782077B83FE DA >> sha-256(ec-point) EFAE35B44D9486E4F94F0F69D6EF72103A726330DFD497FD9BFFE62107DDE0A7 >> proof-of-ownership (cbor array) 847050726F6F664F664F776E65727368697078186F72672E69736F2E31383031 332D352E323031392E6D646C5820EFAE35B44D9486E4F94F0F69D6EF72103A72 6330DFD497FD9BFFE62107DDE0A7F4 >> signature (cose_sign1) 8443A10126A0584F847050726F6F664F664F776E65727368697078186F72672E 69736F2E31383031332D352E323031392E6D646C5820EFAE35B44D9486E4F94F 0F69D6EF72103A726330DFD497FD9BFFE62107DDE0A7F4584041ECFBC76DF5A8 CC2625154A8C27AC7E416CE8514FCE4F5D05D49D73A01F0C4C42CFA9F0BD69C1 7A217E68326B202E7D91B4F4BB41FCA546A1007C6D05C98962
테스트 키 및 인증서
구현 중에 다음 테스트 키를 참고할 수 있습니다.
테스트 발급자 ID (서명) 키
비공개 키
-----BEGIN PRIVATE KEY----- MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCBSDJqogkjkqD7O8mX5 FcUvwOxFp0CxPOGnMD8BfSbcyw== -----END PRIVATE KEY-----
공개 키 인증서
-----BEGIN CERTIFICATE----- MIIBkDCCATegAwIBAgIIIi7oI6UIMEYwCgYIKoZIzj0EAwIwNzE1MDMGA1UEAxMs Ly9leHBlcmltZW50YWwvdXNlcnMvaWdhcmlldi9jcnlwdG86U2lnbkNlcnQwHhcN MjIxMjEyMjAyNDA0WhcNMjMxMjEyMjAyNDA0WjBSMQ8wDQYDVQQLEwZXYWxsZXQx DzANBgNVBAoTBkdvb2dsZTEuMCwGA1UEAxMlVEVTVCBEQVRBIElzc3VlciBJZGVu dGl0eSAoU2lnbmF0dXJlKTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHV9uYlT wGV3UB+SM62fXcW6QzFfSoxq2gU34xG+XVMjxk9JDP9UTE34zX72WIfZ9nqRN9y/ SsbSxw5WrSQdGY2jEjAQMA4GA1UdDwEB/wQEAwIHgDAKBggqhkjOPQQDAgNHADBE AiBnMgsyJhdfelqpOFvT4H63dWSrNPxyrKEdxTwbYMfCKQIgOh2n2gCETH07tjxR l9HQfUcb6vqQY4EoPz2O0wNs6yc= -----END CERTIFICATE-----
테스트 발급자 암호화 키
비공개 키
-----BEGIN PRIVATE KEY----- MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCDZMUnwmygUdKXSujXS ye7YbVnk1Zy/qwnQtzlZs3pQFQ== -----END PRIVATE KEY-----
공개 키 인증서
-----BEGIN CERTIFICATE----- MIIBpjCCAUygAwIBAgIIIVwLEOrrzm0wCgYIKoZIzj0EAwIwNzE1MDMGA1UEAxMs Ly9leHBlcmltZW50YWwvdXNlcnMvaWdhcmlldi9jcnlwdG86U2lnbkNlcnQwHhcN MjIxMjIyMjA1NzIzWhcNMjMxMjIyMjA1NzIzWjBIMQ8wDQYDVQQLEwZXYWxsZXQx DzANBgNVBAoTBkdvb2dsZTEkMCIGA1UEAxMbVEVTVCBEQVRBIElzc3VlciBFbmNy eXB0aW9uMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAETx/HJq//wy6qEnW1tJ1n AYrefYWZ3lP+BJmWwOxF0m6jN1v0Z7Yxz4qw8oTktijih8iZEHRlUp3Kk9z196fq X6MxMC8wDgYDVR0PAQH/BAQDAgMYMB0GA1UdDgQWBBQKFb7K4eZjtp70DLoCHWe7 v/toXzAKBggqhkjOPQQDAgNIADBFAiEAwN1gOwiSx3999Zxc980eKv3p2H8kA4J6 9aWH6jiVaGMCIA7lLkebHFhD0fItGqXv1f5fwiMBV0605KZFh5+RBj/W -----END CERTIFICATE-----
기기 ID(서명) 키(사용자 인증 정보 키라고도 함)
- 공개 키 인증서 체인 (X.509)
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
자세한 내용은 Android의 키 증명 문서를 참고하세요.
기기 암호화 키
비공개 키
-----BEGIN PRIVATE KEY----- MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCBJY8n7A1v+thMM63np m0wr+rAoMFEYmMZ+mWzBIj2CiQ== -----END PRIVATE KEY-----
공개 키 인증서
-----BEGIN CERTIFICATE----- MIIBhzCCAS2gAwIBAgIIAyJ+NkzueMUwCgYIKoZIzj0EAwIwNzE1MDMGA1UEAxMs Ly9leHBlcmltZW50YWwvdXNlcnMvaWdhcmlldi9jcnlwdG86U2lnbkNlcnQwHhcN MjMwMTA5MjMwOTIwWhcNMjQwMTA5MjMwOTIwWjBIMQ8wDQYDVQQLEwZXYWxsZXQx DzANBgNVBAoTBkdvb2dsZTEkMCIGA1UEAxMbVEVTVCBEQVRBIERldmljZSBFbmNy eXB0aW9uMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/m+DNn5ROjPNvpyZpny2 Sh/aeHZDagdUCyCC9zxXxJHoL3BZTpb0kSrQCawZui7eNjDgEt+0k/ZdB4IHe4P+ 2qMSMBAwDgYDVR0PAQH/BAQDAgMYMAoGCCqGSM49BAMCA0gAMEUCIQD9syewRhvK KcyaM7fLwuuCidpiIVd/CZxFCLOo9adCPAIgNd3FMcT710KtYptJBZQ/i7N+C7G5 pLbHmAUoFwNuB2E= -----END CERTIFICATE-----