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)
- Leva dados para criptografia, texto simples e a chave pública do destinatário, pubKeyTo
- Gerar um par de chaves efêmero, ephemPubKey e ephemPrivKey
- 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)
- A chave de criptografia, ke, é os primeiros 128 bits de k
- A chave MAC, km, é SHA-256 dos segundos 128 bits de k
- Criptografe o texto simples simétrico com AES-128-CTR usando ke, km e um iv aleatório
- Retornar a ephemPubKey \├AES-128-CTR-HMAC(ke, km, plaintext) onde a chave pública precisa ser descomprimida (limitação atual com decrypt).