Avançar para o conteúdo principal

Comentários de pagamento criptografados

Visão geral de comentários de pagamentos criptografados e seus detalhes técnicos relacionados com criptografia simétrica e assimétrica.


Introdução à Criptografia dos Comentários

Como parte do protocolo de identidade da Celo, uma chave de criptografia pública é armazenada juntamente com o endereço de um usuário no contrato de Accounts.

Tanto o par de chaves de endereço quanto o par de chaves de criptografia são derivados da frase de backup. Ao enviar uma transação, a chave de criptografia do destinatário é recuperada ao receber seu endereço. O comentário é então criptografado usando um esquema de criptografia híbrido de 128 bits (ECDH no secp256k1 com AES-128-CTR). Este sistema garante que os comentários só podem ser lidos pelo envio e recebimento de mensagens e que as mensagens serão recuperadas ao restaurar uma carteira de suas frases de backup.

Detalhes técnicos da criptografia de comentários

Uma chave de sessão gerada aleatoriamente, sk, é gerada e usada para criptografar simétricamente o comentário. sk é criptografada assimétrica para o remetente e para o destinatário.

Encrypted = ECIES(sk, to=pubSelf) | ECIES(sk, to=pubOther) | AES(ke=sk, km=sk, comment)

Encriptação simétrica (AES-128-CTR)

  • Pega uma chave de criptografia, ke e chave MAC, km e os dados para criptografar, plaintext
  • Cifra: AES-128-CTR usando um iv gerado aleatoriamente
  • Autenticar iv \├ciphertext usando HMAC com SHA-256 e km
  • Devolução iv \├ciphertext \➲ mac

Criptografia assimétrica (ECIES)

  1. Leva dados para criptografia, texto simples e a chave pública do destinatário, pubKeyTo
  2. Gerar um par de chaves efêmero, ephemPubKey e ephemPrivKey
  3. Derive 32 bytes de material chave, k, de ECDH entre ephemPrivKey e pubKeyTousing ConcatKDF (especificado como NIST 800-56C Rev 1 KDF) com SHA-256 para H(x)
  4. A chave de criptografia, ke, é os primeiros 128 bits de k
  5. A chave MAC, km, é SHA-256 dos segundos 128 bits de k
  6. Criptografe o texto simples simétrico com AES-128-CTR usando ke, km e um iv aleatório
  7. Retornar a ephemPubKey \├AES-128-CTR-HMAC(ke, km, plaintext) onde a chave pública precisa ser descomprimida (limitação atual com decrypt).