Mã hoá hai đầu

Tổng quan về HPKE

Mã hoá khoá công khai kết hợp (HPKE) là một cơ chế mã hoá dùng để mã hoá tải trọng thành một khoá công khai. Cơ chế này được gọi là "kết hợp" vì bản thân tải trọng được mã hoá bằng một khoá đối xứng và HPKE lấy khoá đối xứng này bằng cách sử dụng trao đổi khoá Diffie-Hellman.

Các chế độ HPKE

  • Base: Chế độ phổ biến nhất.
  • Auth: Sử dụng khoá riêng tư của người gửi để xác thực.
  • PSK: Sử dụng một khoá có entropy cao được chia sẻ trước để xác thực.
  • AuthPSK: Kết hợp khoá riêng tư của người gửi và một khoá có entropy cao được chia sẻ trước để xác thực.

Tương tác ở chế độ Base (Thiết bị và Tổ chức phát hành)

Sau đây là quy trình cấp cao mô tả một tình huống trong đó một thiết bị muốn gửi dữ liệu nhạy cảm đến một Tổ chức phát hành.

Bước 1: Tạo và trao đổi khoá

  • Tổ chức phát hành tạo một Cặp khoá mã hoá: IE₍ₚₖ, ₛₖ₎ trong đó ₚₖ là khoá công khai và ₛₖ là khoá riêng tư.
  • Tổ chức phát hành gửi và chia sẻ khoá công khai (IEₚₖ) với Thiết bị.

Bước 2: Mã hoá và gửi

Thiết bị thực thi Hybrid-Encrypt(Data, IEₚₖ, Context).

  • Thiết bị tạo một cặp khoá bất đối xứng tạm thời để mã hoá: ₍Eₚₖ, Eₛₖ₎.
  • Thiết bị lấy một khoá AES đối xứng, được gọi là bí mật được chia sẻ (SS), bằng công thức: SS = ExtractAndExpand(Diffie-Hellman(IEₚₖ, Eₛₖ), _Context).
  • Thiết bị mã hoá dữ liệu bằng bí mật được chia sẻ này để tạo encData.
  • Thiết bị chia sẻ { encData, Eₚₖ } và gửi đến Tổ chức phát hành.

Bước 3: Giải mã

Tổ chức phát hành hiện đang giữ IE₍ₚₖ, ₛₖ₎{ encData, Eₚₖ } đã nhận được. Tổ chức phát hành thực thi Hybrid-Decrypt(encData, Eₚₖ, IEₛₖ, Context).

  • Tổ chức phát hành lấy khoá AES đối xứng (bí mật được chia sẻ, SS) bằng công thức: SS = ExtractAndExpand(Diffie-Hellman(IEₛₖ, Eₚₖ), _Context).
  • Tổ chức phát hành giải mã encData bằng SS.

Thuật ngữ

Thuật ngữ Định nghĩa và thông tin chi tiết
DIₚₖ Chuỗi chứng chỉ khoá thông tin xác thực (Chứng chỉ nhận dạng thiết bị): Một chuỗi chứng chỉ X.509 cho CredentialKey xác định thông tin xác thực cho tổ chức phát hành.
  • Chứa một tiện ích chứng thực Keystore Android mô tả khoá và phần cứng bảo mật của khoá đó.
  • Dùng để chứng minh quyền sở hữu thông tin xác thực.
  • Tổ chức phát hành PHẢI kiểm tra kỹ chuỗi chứng chỉ này (ví dụ: xác minh chứng chỉ gốc là chứng chỉ nổi tiếng, sự hiện diện của Tag::IDENTITY_CREDENTIAL_KEY, sự hiện diện của thử thách, Tag::ATTESTATION_APPLICATION_ID chính xác, đã bật tính năng khởi động đã xác minh và trạng thái chữ ký/thu hồi).
Aₚₖ Khoá xác thực: Các khoá xác thực X.509 động yêu cầu chứng nhận, mỗi khoá được CredentialKey ký.
  • Tổ chức phát hành tạo dữ liệu xác thực tĩnh cho mỗi khoá, gửi dữ liệu đó đến thiết bị và thiết bị lưu trữ dữ liệu đó thông qua storeStaticAuthenticationData.
  • Khoá này là một tải trọng sẽ được mã hoá, không được sử dụng trực tiếp cho E2EE.
  • Các trường X.509 không bắt buộc bao gồm: phiên bản (INTEGER 2), serialNumber (INTEGER 1), chữ ký (ECDSA), chủ đề (CN được đặt thành "Khoá xác thực thông tin xác thực danh tính Android"), tổ chức phát hành (CN được đặt thành "Khoá thông tin xác thực danh tính Android"), thời gian hợp lệ (thời gian hiện tại đến 365 ngày trong tương lai) và subjectPublicKeyInfo (phải chứa khoá công khai đã chứng thực).
IE₍ₛₖ,ₚₖ₎ Cặp khoá mã hoá của tổ chức phát hành: Một khoá bất đối xứng do Tổ chức phát hành tạo. Thiết bị sử dụng khoá này để thực hiện Mã hoá kết hợp cho Tổ chức phát hành.
II₍ₛₖ,ₚₖ₎ Cặp khoá nhận dạng của tổ chức phát hành: Một khoá bất đối xứng do Tổ chức phát hành tạo. Thiết bị sử dụng khoá này để xác minh danh tính của Tổ chức phát hành.
DE₍ₛₖ,ₚₖ₎ Cặp khoá mã hoá thiết bị: Một khoá bất đối xứng tạm thời do Thiết bị tạo cho mỗi yêu cầu. Tổ chức phát hành sử dụng khoá này để thực hiện Mã hoá kết hợp cho Thiết bị.
FE₍ₛₖ,ₚₖ₎ Khoá mã hoá trường: Một khoá bất đối xứng tạm thời được tạo cho mỗi trường trong quá trình Mã hoá kết hợp.

E2EE trong API cung cấp thông tin xác thực kỹ thuật số của Google

Bước 1: Nhận khoá nhận dạng và khoá mã hoá của tổ chức phát hành

  • Điểm cuối API: /getIdentityKey, /getHybridEncryptionKey.
  • Trả về: IIₚₖ, IEₚₖ.

Bước 2: Nhận nonce đăng ký thiết bị

  • Tạo Mã tham chiếu thiết bị (deviceReferenceId).
  • Điểm cuối API: Gọi /getDeviceRegistrationNonce(deviceReferenceId).
  • Trả về: nonce.

Bước 3: Đăng ký thiết bị

  • Thiết lập Thông tin xác thực danh tính Android.
  • Gọi IC.getCredentialKeyCertificateChain(nonce) để trả về DIₚₖ được nhúng nonce.
  • Điểm cuối API: Gọi /registerDevice(deviceReferenceId, DIₚₖ).
  • Tổ chức phát hành phải kiểm tra kỹ chuỗi chứng chỉ này để đảm bảo chứng chỉ gốc là chứng chỉ nổi tiếng, thử thách hiện diện, ATTESTATION_APPLICATION_ID khớp với ứng dụng dự kiến, đã bật tính năng khởi động đã xác minh, và chữ ký hoặc việc thu hồi là hợp lệ.
  • Trả về: ack.

Bước 4a: Gửi yêu cầu chứng minh

  • Đối với mỗi trường:
    • Thực thi Hybrid-Encrypt(Data, IEₚₖ, Context=FieldName) để tạo encDataFEₚₖ.
    • Gọi IC.proveOwnership(SHA-256(Data + IEₚₖ)) để lấy sigData (một cấu trúc dữ liệu COSE_Sign1 do CredentialKey ký, với tải trọng được đặt thành ProofofOwnership).
  • Điểm cuối API: Gọi /proofUser([encData, sigData, FEₚₖ]).
  • Tổ chức phát hành xác minh sigData bằng DIₚₖ.
  • Tổ chức phát hành thực thi Hybrid-Decrypt(encData, FEₚₖ, IEₛₖ, Context=FieldName) để tạo Data.
  • Trả về: ack.

Bước 4b: Cập nhật trạng thái chứng minh

  • Thông báo cho Google về thông tin cập nhật trạng thái Chứng minh bằng cách sử dụng deviceReferenceIdproofingId.
  • Điểm cuối API: Gọi /notifyProofingStatusUpdateAvailable(...).
  • Máy chủ của Google tìm nạp trạng thái chứng minh từ tổ chức phát hành bằng cách gọi /getProofingStatus(deviceReferenceId, proofingId).

Bước 5: Cung cấp thông tin xác thực

  • Gọi IC.proveOwnership(SHA-256(DEₚₖ)) để nhận sigDEₚₖ (cấu trúc COSE_Sign1 do CredentialKey/DIₛₖ ký bằng tải trọng ProofofOwnership).
  • Điểm cuối API: Gửi deviceReferenceId, proofingId, credentialIdsigDEₚₖ đến Tổ chức phát hành thông qua /provisionCredential(dRId, pId, cId, DEₚₖ, sigDEₚₖ).
  • Phía tổ chức phát hành:
    • Xác minh sigDEₚₖ bằng DIₚₖ.
    • Mã hoá thông tin xác thực (PersonalizationData + AccessControlProfiles).
    • Thực thi Hybrid-Encrypt(Cred, DEₚₖ, Context=FieldName) để tạo encCredFEₚₖ.
    • Tạo sigCred bằng cách ký COSE_Sign1 SHA-256(Cred + DEₚₖ) bằng IIₛₖ.
    • Trả về encCred, sigCred, FEₚₖ.
  • Phía thiết bị:
    • Xác minh sigCred bằng IIₚₖ.
    • Thực thi Hybrid-Decrypt(encCred, FEₚₖ, DEₛₖ, Context=FieldName) để trích xuất Cred.
    • Gọi WC.personalize(Cred) để nhận sigCredReceipt (COSE_Sign1 do CredentialKey ký, tải trọng ProofOfProvisioning).
    • Thực thi Hybrid-Encrypt(sigCredReceipt, DEₛₖ, Context=FieldName) tạo encReceiptFE1ₚₖ.
    • Gọi IC.proveOwnership(SHA-256(encReceipt + IEₚₖ)) để nhận sigReceipt (COSE_Sign1 do CredentialKey ký, tải trọng ProofofOwnership).
    • Tạo Khoá xác thực [Aₚₖ].

Bước 6: Tạo MSO & StaticAuthData

  • Phía thiết bị:
    • Đối với mỗi Khoá xác thực: Thực thi Hybrid-Encrypt(AuthKey, IEₚₖ, Context=FieldName) để tạo encAuthKeyFEₚₖ.
    • Gọi IC.proveOwnership(SHA-256(AuthKey + IEₚₖ)) để nhận sigAuthKey.
    • Điểm cuối API: Gọi /provisionMSOs(.., encReceipt, sigReceipt, [encAuthKey, sigAuthKey, FEₚₖ], DEₚₖ, sigDEₚₖ).
  • Phía tổ chức phát hành:
    • Xác minh sigReceiptsigDEₚₖ dựa trên DIₚₖ để xác minh biên nhận.
    • Đối với mỗi [encAuthKey, sigAuthKey, FEₚₖ]: Thực thi Hybrid-Decrypt(encAuthKey, FEₚₖ, IEₛₖ, Context=FieldName) để trích xuất AuthKey.
    • Tạo MSO (bao gồm AuthKey) và tạo staticAuthData (SAD), bao gồm digestIdMapping và issuerAuth.
    • Thực thi Hybrid-Encrypt(SAD, DEₚₖ, Context=FieldName) để tạo encSADFEₚₖ.
    • Ký bằng COSE_Sign1 SHA-256(SAD + DEₚₖ) bằng IIₛₖ để tạo sigSAD.
    • Trả về [encSAD, sigSAD, FEₚₖ].
  • Phía thiết bị (Cuối cùng):
    • Đối với mỗi encSAD, sigSAD, FEₚₖ được trả về: Xác minh sigSAD bằng IIₚₖ.
    • Thực thi Hybrid-Decrypt(encSAD, FEₚₖ, DEₛₖ, Context=FieldName) để trích xuất SAD.
    • Gọi storeStaticAuthenticationData bằng SAD để hoàn tất quy trình.

Yêu cầu về việc luân phiên

Khoá nhận dạng của tổ chức phát hành phải được luân phiên mỗi năm một lần. Trong thời gian luân phiên, tổ chức phát hành phải lưu trữ khoá cũ và khoá mới, đồng thời thiết bị sẽ tin tưởng cả hai khoá đó. Sau khi Tổ chức phát hành đã hoàn toàn chuyển sang sử dụng Khoá nhận dạng của tổ chức phát hành mới, Tổ chức phát hành phải ngừng lưu trữ khoá cũ và thiết bị sẽ không còn tin tưởng khoá đó nữa.

Khoá mã hoá kết hợp của tổ chức phát hành phải được luân phiên 3 tháng một lần. Trong thời gian luân phiên, tổ chức phát hành chỉ nên bắt đầu lưu trữ khoá mới và thiết bị sẽ bắt đầu mã hoá thành khoá mới. Tổ chức phát hành phải hỗ trợ giải mã bằng cả khoá cũ và khoá mới trong một khoảng thời gian hợp lý để tránh thời gian ngừng hoạt động.

Giá trị AAD

Sử dụng các giá trị bối cảnh sau cho AAD.

Trường Giá trị bối cảnh
preAuthorizationCode PreAuthorizationCode

Để biết các giá trị AAD của các loại bằng chứng khác, hãy liên hệ với người đại diện của Google.

Véc tơ kiểm thử cho tính năng Mã hoá hai đầu thông tin xác thực kỹ thuật số

Véc tơ kiểm thử cho tính năng Mã hoá hai đầu mã nhận dạng kỹ thuật số là một tập hợp các thông báo được xác định trước và các phiên bản đã mã hoá của chúng. Các véc tơ này được dùng để kiểm thử tính chính xác của thuật toán mã hoá.

Tham số mã hoá HPKE:

  KEM = DHKEM(P-256, HKDF-SHA256), id = 0x0010
  KDF = HKDF-SHA256, id = 0x0001
  AEAD = AES-256-GCM, id = 0x0002
  • Dữ liệu liên kết bổ sung (AAD) là dữ liệu đầu vào cho HPKE CtxInfo, AAD cho mã hoá AES (đối xứng) là NULL (trống).
  • Dữ liệu nhị phân trong cấu trúc JSON được mã hoá Base64, các giá trị trung gian trong tài liệu này được mã hoá Hex.
  • Định dạng chữ ký trong tài liệu này:
    • Thiết bị → Tổ chức phát hành, Tổ chức phát hành → Thiết bị: COSE_Sign1

Ứng dụng → Tổ chức phát hành, Tổ chức phát hành → Ứng dụng

Mẫu để giao tiếp theo cả hai hướng.

Trường yêu cầu được mã hoá mẫu

Văn bản thuần tuý = "Hello, world!", dữ liệu được liên kết = "field1"

{
  "field1": {
    "encryptedValue": "yGFWT9MkgV6/IZfYUZjqGEf3k2M/HQhz9XnKWyI\u003d",
    "encapsulatedKey": "BOpBC2LGh1RWk99iIm6ISsaPbtrNnu9hIgHeby5khXY6PG+ZmDOYmorEUne7uzhDmD6JCVYyME1+A8ueJ0CZvAI\u003d",
    "signature": "hEOhASagWE+EcFByb29mT2ZPd25lcnNoaXB4GG9yZy5pc28uMTgwMTMtNS4yMDE5Lm1kbFggTOsHXzsgDgh/2chekltve8rJsFFb6DTtBjY98H58gjb0WEBUnwNT3gvbavE8QoaAKaELqF7JKqh0+ivPisQg6RerTmx8Zsk/tCjW/y1cxhGKatl2EjASemns67r1/lZumEqZ",
    "recipientKeyId": "4D7E5D8B9460810A"
  }
}

Phân tích sâu:

>> 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

Khoá mã hoá thiết bị hoặc tổ chức phát hành mẫu

{
  "deviceEncryptionKey": {
    "publicKey": "BP5vgzZ+UTozzb6cmaZ8tkof2nh2Q2oHVAsggvc8V8SR6C9wWU6W9JEq0AmsGbou3jYw4BLftJP2XQeCB3uD/to\u003d",
    "signature": "hEOhASagWE+EcFByb29mT2ZPd25lcnNoaXB4GG9yZy5pc28uMTgwMTMtNS4yMDE5Lm1kbFgg7641tE2UhuT5Tw9p1u9yEDpyYzDf1Jf9m//mIQfd4Kf0WEBB7PvHbfWozCYlFUqMJ6x+QWzoUU/OT10F1J1zoB8MTELPqfC9acF6IX5oMmsgLn2RtPS7QfylRqEAfG0FyYli",
    "keyIdentifier": "F29BA6298BC93156D2D50EA7E2233FC4"
  }
}

Phân tích sâu:

>> 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

Khoá và chứng chỉ kiểm thử

Bạn có thể tham khảo các khoá kiểm thử sau trong quá trình triển khai.

Khoá nhận dạng (chữ ký) của tổ chức phát hành kiểm thử

  • Khoá riêng tư

    -----BEGIN PRIVATE KEY-----
    MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCBSDJqogkjkqD7O8mX5
    FcUvwOxFp0CxPOGnMD8BfSbcyw==
    -----END PRIVATE KEY-----

  • Chứng chỉ khoá công khai

    -----BEGIN CERTIFICATE-----
    MIIBkDCCATegAwIBAgIIIi7oI6UIMEYwCgYIKoZIzj0EAwIwNzE1MDMGA1UEAxMs
    Ly9leHBlcmltZW50YWwvdXNlcnMvaWdhcmlldi9jcnlwdG86U2lnbkNlcnQwHhcN
    MjIxMjEyMjAyNDA0WhcNMjMxMjEyMjAyNDA0WjBSMQ8wDQYDVQQLEwZXYWxsZXQx
    DzANBgNVBAoTBkdvb2dsZTEuMCwGA1UEAxMlVEVTVCBEQVRBIElzc3VlciBJZGVu
    dGl0eSAoU2lnbmF0dXJlKTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHV9uYlT
    wGV3UB+SM62fXcW6QzFfSoxq2gU34xG+XVMjxk9JDP9UTE34zX72WIfZ9nqRN9y/
    SsbSxw5WrSQdGY2jEjAQMA4GA1UdDwEB/wQEAwIHgDAKBggqhkjOPQQDAgNHADBE
    AiBnMgsyJhdfelqpOFvT4H63dWSrNPxyrKEdxTwbYMfCKQIgOh2n2gCETH07tjxR
    l9HQfUcb6vqQY4EoPz2O0wNs6yc=
    -----END CERTIFICATE-----

Khoá mã hoá của tổ chức phát hành kiểm thử

  • Khoá riêng tư

    -----BEGIN PRIVATE KEY-----
    MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCDZMUnwmygUdKXSujXS
    ye7YbVnk1Zy/qwnQtzlZs3pQFQ==
    -----END PRIVATE KEY-----

  • Chứng chỉ khoá công khai

    -----BEGIN CERTIFICATE-----
    MIIBpjCCAUygAwIBAgIIIVwLEOrrzm0wCgYIKoZIzj0EAwIwNzE1MDMGA1UEAxMs
    Ly9leHBlcmltZW50YWwvdXNlcnMvaWdhcmlldi9jcnlwdG86U2lnbkNlcnQwHhcN
    MjIxMjIyMjA1NzIzWhcNMjMxMjIyMjA1NzIzWjBIMQ8wDQYDVQQLEwZXYWxsZXQx
    DzANBgNVBAoTBkdvb2dsZTEkMCIGA1UEAxMbVEVTVCBEQVRBIElzc3VlciBFbmNy
    eXB0aW9uMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAETx/HJq//wy6qEnW1tJ1n
    AYrefYWZ3lP+BJmWwOxF0m6jN1v0Z7Yxz4qw8oTktijih8iZEHRlUp3Kk9z196fq
    X6MxMC8wDgYDVR0PAQH/BAQDAgMYMB0GA1UdDgQWBBQKFb7K4eZjtp70DLoCHWe7
    v/toXzAKBggqhkjOPQQDAgNIADBFAiEAwN1gOwiSx3999Zxc980eKv3p2H8kA4J6
    9aWH6jiVaGMCIA7lLkebHFhD0fItGqXv1f5fwiMBV0605KZFh5+RBj/W
    -----END CERTIFICATE-----

Khoá nhận dạng (chữ ký) của thiết bị, hay còn gọi là Khoá thông tin xác thực

  • Chuỗi chứng chỉ khoá công khai (X.509)
    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

Tham khảo tài liệu Chứng thực khoá của Android để biết thêm thông tin chi tiết.

Khoá mã hoá thiết bị

  • Khoá riêng tư

    -----BEGIN PRIVATE KEY-----
    MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCBJY8n7A1v+thMM63np
    m0wr+rAoMFEYmMZ+mWzBIj2CiQ==
    -----END PRIVATE KEY-----

  • Chứng chỉ khoá công khai

    -----BEGIN CERTIFICATE-----
    MIIBhzCCAS2gAwIBAgIIAyJ+NkzueMUwCgYIKoZIzj0EAwIwNzE1MDMGA1UEAxMs
    Ly9leHBlcmltZW50YWwvdXNlcnMvaWdhcmlldi9jcnlwdG86U2lnbkNlcnQwHhcN
    MjMwMTA5MjMwOTIwWhcNMjQwMTA5MjMwOTIwWjBIMQ8wDQYDVQQLEwZXYWxsZXQx
    DzANBgNVBAoTBkdvb2dsZTEkMCIGA1UEAxMbVEVTVCBEQVRBIERldmljZSBFbmNy
    eXB0aW9uMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/m+DNn5ROjPNvpyZpny2
    Sh/aeHZDagdUCyCC9zxXxJHoL3BZTpb0kSrQCawZui7eNjDgEt+0k/ZdB4IHe4P+
    2qMSMBAwDgYDVR0PAQH/BAQDAgMYMAoGCCqGSM49BAMCA0gAMEUCIQD9syewRhvK
    KcyaM7fLwuuCidpiIVd/CZxFCLOo9adCPAIgNd3FMcT710KtYptJBZQ/i7N+C7G5
    pLbHmAUoFwNuB2E=
    -----END CERTIFICATE-----