Passa al contenuto principale

RFC 9380 - Hashing su curve ellittiche

  • Stato: Informational
  • Pubblicato: August 2023
  • Stream: IRTF
  • Errata: Nessun errata

Sommario

Questo documento specifica una serie di algoritmi per codificare o eseguire l'hashing di una stringa arbitraria su un punto di una curva ellittica. Questo documento è un prodotto del Crypto Forum Research Group (CFRG) nell'IRTF.

Stato di questo memorandum

Questo documento non è una specifica Internet Standards Track; è pubblicato a scopo informativo.

Questo documento è un prodotto della Internet Research Task Force (IRTF). L'IRTF pubblica i risultati delle attività di ricerca e sviluppo relative a Internet. Questi risultati potrebbero non essere adatti alla distribuzione. Questo RFC rappresenta il consenso del Crypto Forum Research Group della Internet Research Task Force (IRTF). I documenti approvati per la pubblicazione dall'IRSG non sono candidati per alcun livello di standard Internet; vedere la Sezione 2 della RFC 7841.

Informazioni sullo stato attuale di questo documento, eventuali errata e come fornire feedback su di esso possono essere ottenute su https://www.rfc-editor.org/info/rfc9380.

Copyright (c) 2023 IETF Trust e le persone identificate come autori del documento. Tutti i diritti riservati.

Questo documento è soggetto al BCP 78 e alle disposizioni legali dell'IETF Trust relative ai documenti IETF (https://trustee.ietf.org/license-info) in vigore alla data di pubblicazione di questo documento. Si prega di esaminare attentamente questi documenti, in quanto descrivono i propri diritti e restrizioni rispetto a questo documento.

Indice

  1. Introduzione 1.1. Notazione dei requisiti
  2. Contesto 2.1. Curve ellittiche 2.2. Terminologia 2.2.1. Mappature 2.2.2. Codifiche 2.2.3. Codifiche a oracolo casuale 2.2.4. Serializzazione 2.2.5. Separazione dei domini
  3. Codifica di stringhe di byte su curve ellittiche 3.1. Requisiti di separazione dei domini
  4. Funzioni di utilità 4.1. La funzione sgn0
  5. Hashing su un campo finito 5.1. Considerazioni sull'efficienza nei campi di estensione 5.2. Implementazione di hash_to_field 5.3. expand_message 5.3.1. expand_message_xmd 5.3.2. expand_message_xof 5.3.3. Utilizzo di DST più lunghi di 255 byte 5.3.4. Definizione di altre varianti di expand_message
  6. Mappature deterministiche 6.1. Scelta di una funzione di mappatura 6.2. Interfaccia 6.3. Notazione 6.4. Segno del punto risultante 6.5. Casi eccezionali 6.6. Mappature per curve di Weierstrass 6.6.1. Metodo Shallue-van de Woestijne 6.6.2. Metodo Shallue-van de Woestijne-Ulas semplificato 6.6.3. SWU semplificato per AB == 0 6.7. Mappature per curve di Montgomery 6.7.1. Metodo Elligator 2 6.8. Mappature per curve Twisted Edwards 6.8.1. Mappe razionali da Montgomery a Twisted Edwards 6.8.2. Metodo Elligator 2
  7. Cancellazione del cofattore
  8. Suite per l'hashing 8.1. Implementazione di una suite Hash-to-Curve 8.2. Suite per NIST P-256 8.3. Suite per NIST P-384 8.4. Suite per NIST P-521 8.5. Suite per curve25519 e edwards25519 8.6. Suite per curve448 e edwards448 8.7. Suite per secp256k1 8.8. Suite per BLS12-381 8.8.1. BLS12-381 G1 8.8.2. BLS12-381 G2 8.9. Definizione di una nuova suite Hash-to-Curve 8.10. Convenzioni di denominazione degli ID suite
  9. Considerazioni IANA
  10. Considerazioni sulla sicurezza 10.1. Proprietà delle codifiche 10.2. Hashing delle password 10.3. Requisiti di tempo costante 10.4. encode_to_curve: Distribuzione dell'output e indifferenziabilità 10.5. Sicurezza di hash_to_field 10.6. Sicurezza di expand_message_xmd 10.7. Separazione dei domini per le varianti di expand_message 10.8. Livelli di sicurezza target
  11. Riferimenti 11.1. Riferimenti normativi 11.2. Riferimenti informativi Appendice A. Lavori correlati Appendice B. Hashing su ristretto255 Appendice C. Hashing su decaf448 Appendice D. Mappe razionali D.1. Mappatura generica da Montgomery a Twisted Edwards D.2. Mappatura da Weierstrass a Montgomery Appendice E. Mappe di isogenia per le suite E.1. Mappa di 3-isogenia per secp256k1 E.2. Mappa di 11-isogenia per BLS12-381 G1 E.3. Mappa di 3-isogenia per BLS12-381 G2 Appendice F. Implementazioni in linea retta di mappature deterministiche F.1. Metodo Shallue-van de Woestijne F.2. Metodo SWU semplificato F.2.1. Subroutine sqrt_ratio F.3. Metodo Elligator 2 Appendice G. Codice di esempio ottimizzato specifico per la curva G.1. Interfaccia e sistemi di coordinate proiettive G.2. Elligator 2 G.2.1. curve25519 (q = 5 (mod 8), K = 1) G.2.2. edwards25519 G.2.3. curve448 (q = 3 (mod 4), K = 1) G.2.4. edwards448 G.2.5. Curve di Montgomery con q = 3 (mod 4) G.2.6. Curve di Montgomery con q = 5 (mod 8) G.3. Cancellazione del cofattore per BLS12-381 G2 Appendice H. Script per la generazione dei parametri H.1. Ricerca di Z per la mappa Shallue-van de Woestijne H.2. Ricerca di Z per SWU semplificato H.3. Ricerca di Z per Elligator 2 Appendice I. Funzioni sqrt e is_square I.1. sqrt per q = 3 (mod 4) I.2. sqrt per q = 5 (mod 8) I.3. sqrt per q = 9 (mod 16) I.4. Algoritmo Tonelli-Shanks a tempo costante I.5. is_square per F = GF(p^2) Appendice J. Vettori di test della suite J.1. NIST P-256 J.1.1. P256_XMD:SHA-256_SSWU_RO_ J.1.2. P256_XMD:SHA-256_SSWU_NU_ J.2. NIST P-384 J.2.1. P384_XMD:SHA-384_SSWU_RO_ J.2.2. P384_XMD:SHA-384_SSWU_NU_ J.3. NIST P-521 J.3.1. P521_XMD:SHA-512_SSWU_RO_ J.3.2. P521_XMD:SHA-512_SSWU_NU_ J.4. curve25519 J.4.1. curve25519_XMD:SHA-512_ELL2_RO_ J.4.2. curve25519_XMD:SHA-512_ELL2_NU_ J.5. edwards25519 J.5.1. edwards25519_XMD:SHA-512_ELL2_RO_ J.5.2. edwards25519_XMD:SHA-512_ELL2_NU_ J.6. curve448 J.6.1. curve448_XOF:SHAKE256_ELL2_RO_ J.6.2. curve448_XOF:SHAKE256_ELL2_NU_ J.7. edwards448 J.7.1. edwards448_XOF:SHAKE256_ELL2_RO_ J.7.2. edwards448_XOF:SHAKE256_ELL2_NU_ J.8. secp256k1 J.8.1. secp256k1_XMD:SHA-256_SSWU_RO_ J.8.2. secp256k1_XMD:SHA-256_SSWU_NU_ J.9. BLS12-381 G1 J.9.1. BLS12381G1_XMD:SHA-256_SSWU_RO_ J.9.2. BLS12381G1_XMD:SHA-256_SSWU_NU_ J.10. BLS12-381 G2 J.10.1. BLS12381G2_XMD:SHA-256_SSWU_RO_ J.10.2. BLS12381G2_XMD:SHA-256_SSWU_NU_ Appendice K. Vettori di test di espansione K.1. expand_message_xmd(SHA-256) K.2. expand_message_xmd(SHA-256) (Long DST) K.3. expand_message_xmd(SHA-512) K.4. expand_message_xof(SHAKE128) K.5. expand_message_xof(SHAKE128) (Long DST)