Questioni aperte
Ciò che è stabilito nel formato wire di Label 309 rispetto a ciò che è rinviato o resta in prospettiva: il nucleo crittografico confermato, i costrutti candidati riservati a una revisione futura e il modello di migrazione per modificare una costante.
Label 309 v1 è congelato. Il formato wire sotto la label dei metadati 309, la codifica canonica in CBOR, i registri degli algoritmi, la busta sigillata del sealed-PoE e il costrutto della firma sono ormai stabiliti: un verificatore v1 conforme legge ogni record v1, e un produttore v1 conforme emette record che ogni verificatore v1 accetta. Questa pagina non parla di cambiare tutto ciò. È il registro di ciò che oggi è confermato nello standard e di ciò che resta in prospettiva, cioè i costrutti crittografici candidati riservati a una possibile revisione futura, insieme alla procedura rigorosa per modificare una costante crittografica quando uno di essi dovesse diventare realtà.
Nulla di quanto riportato qui è una roadmap di prodotto. Ogni voce è una decisione tecnica a livello di protocollo: un identificatore di algoritmo, una derivazione, una politica del verificatore o una regola di versionamento. A chi implementa lo standard serve la metà stabilita per costruire oggi un'implementazione v1, e la metà in prospettiva per costruirla in modo che un eventuale successore post-quantistico o basato esclusivamente su RFC sia una voce di registro additiva, mai una riscrittura.
Costrutti stabiliti
Questi sono decisi. Sono enunciati in modo esplicito qui perché costituiscono le scelte portanti che chi implementa vuole più spesso trovare confermate in un unico punto; le pagine collegate riportano il costrutto completo.
Il KEM post-quantistico è incluso in v1
Il KEM ibrido X-Wing (ML-KEM-768 composto con X25519) è registrato con
l'identificatore mlkem768x25519 nel registro enc.kem fin dalla prima
versione. Non è un candidato per il futuro: è presente in enc.scheme: 1
accanto al KEM classico x25519, e il campo on-wire enc.kem seleziona, per
ciascun record, il KEM per slot, la forma dello slot e la derivazione della chiave
di cifratura della chiave (key-encryption-key).
X-Wing è consumato come scatola nera: il costrutto usa solo la sua interfaccia
pubblica, cioè incapsula, decapsula e il segreto condiviso da 32 byte, e non fa
alcuna assunzione sull'hashing interno del combiner. Entrambi i KEM derivano la KEK
per slot sotto un'unica forma di salt a hash etichettato, SHA-256(label || enc.nonce || <materiale KEM dello slot> || pub_R), calcolata sui byte wire dello slot stesso:
sul percorso ibrido,
SHA-256("cardano-poe-xwing-kek-salt-v1" || enc.nonce || kem_ct || pub_R). Comprimere
con un hash a 32 byte fissi lega il nonce della busta, il testo cifrato e la chiave
pubblica del destinatario nella KEK, dissolvendo al contempo l'ambiguità di parsing
che un testo cifrato post-quantistico a lunghezza variabile creerebbe con un salt a
concatenazione nuda. Viene esposta solo la variante ibrida: ML-KEM puro è volutamente
escluso, così che la componente X25519 preservi la sicurezza classica nel caso in cui
ML-KEM-768 venisse mai compromesso. Vedi Sealed PoE e
Registri degli algoritmi.
L'impegno della chiave sigillata lega l'intestazione e la rivendicazione dell'hash
Entrambi i percorsi sigillati impegnano la chiave di cifratura del contenuto a una
trascrizione chiusa, serializzata con la stessa funzione di CBOR canonico che usa il
resto della busta, che fissa i campi dell'intestazione e la rivendicazione
dell'hash del testo in chiaro dell'elemento (hashes_hash). Sul percorso con slot
indirizzati al destinatario (enc.slots) l'impegno è on-chain: slots_mac è un HMAC
con chiave derivata dalla CEK su una trascrizione che porta lo scheme, il path, gli
identificatori di AEAD e KEM, il nonce, l'insieme di slot mescolato e hashes_hash,
così che un relay non possa innestare un testo cifrato su un insieme di slot diverso o
su una rivendicazione dell'hash diversa senza far fallire il controllo del MAC
on-chain, prima ancora di recuperare il testo cifrato. Il percorso con passphrase
(enc.passphrase) porta un impegno equivalente in un'intestazione di 32 byte
all'interno del blob di testo cifrato, su una trascrizione che aggiunge il salt e
i parametri Argon2id, così che manomettere gli input del KDF faccia fallire il
controllo dell'impegno. Il contenuto vero e proprio viene poi sigillato in uno STREAM
segmentato sotto una chiave del contenuto derivata dalla CEK; l'AAD per chunk è vuoto,
perché ogni campo dell'intestazione è già legato a quella chiave in modo transitivo.
Costrutto completo in Sealed PoE.
La profondità di conferma è una politica del verificatore
Un record viene ancorato nel momento stesso in cui la sua transazione è inclusa,
ma un verificatore che deve decidere quanto regolamento richiedere prima di
emettere un verdetto applica una soglia di profondità di conferma. Label 309
ne fa una politica del verificatore, non un MUST normativo. Lo standard
definisce la superficie leggibile dalla macchina: una transazione al di sotto della
soglia è riportata come pending (il codice tipizzato INSUFFICIENT_CONFIRMATIONS),
mai come failed, e può risolversi in valid a un nuovo tentativo, mentre la soglia
stessa (RACCOMANDATA ≥ 15 blocchi) è un parametro configurato in fase di deployment,
non una costante incisa nel formato wire. Un verificatore che richiede un regolamento
più profondo per attestazioni di valore elevato è pienamente conforme. Vedi
Verifica.
La verifica Ed25519 è rigorosa
Le firme a livello di record DEVONO essere verificate secondo le regole rigorose di RFC 8032 §5.1.7, non secondo la tolleranza più permissiva della verifica batch di ZIP-215. La verifica rigorosa rifiuta le codifiche non canoniche e i punti di ordine piccolo che un verificatore permissivo accetterebbe, così che due verificatori conformi raggiungano sempre lo stesso verdetto sulla stessa firma. Chi implementa deve accertarsi che il proprio backend Ed25519 sia in modalità rigorosa; alcune librerie usano per impostazione predefinita la variante permissiva. Vedi Firme.
Il CBOR canonico è il contratto di determinismo
Ogni record è codificato come CBOR canonico secondo RFC 8949 §4.2.1: forme intere preferite, array e mappe a lunghezza definita, chiavi delle mappe ordinate byte per byte, nessuna chiave duplicata, nessun tag. È il determinismo a far sì che una firma calcolata sul corpo da un'implementazione si verifichi sotto un'altra, e che due produttori dello stesso record logico emettano byte identici. Questo requisito è inderogabile per ogni implementazione conforme ed è il fondamento del contratto di parità tra i linguaggi.
Stabilito significa congelato
Ciascuno dei costrutti qui sopra fa parte di v1 così come è stato rilasciato. Compaiono in questa pagina perché sono le decisioni che chi implementa ricontrolla più spesso, non perché qualcuna di esse sia ancora aperta. Un'implementazione v1 si costruisce su questi esattamente come sono scritti.
Candidati in prospettiva
Le voci qui sotto sono candidati, non costrutti già rilasciati. Nessuna è un difetto di v1; nessuna è impegnata. Sono registrate affinché un'implementazione costruita oggi lasci spazio per esse come voci di registro additive, e affinché un futuro revisore possa vedere quali evoluzioni il design agile rispetto agli algoritmi già prevede.
Un profilo alternativo di AEAD del contenuto riservato
Il livello del contenuto del sealed-PoE in v1 è chacha20-poly1305-stream64k, cioè
ChaCha20-Poly1305 di RFC 8439 nel layout STREAM segmentato, a sua volta supportato da
un RFC: non c'è quindi alcuna questione aperta sullo stato formale del cifrario del
contenuto attuale. Ciò che resta riservato è una strada verso un AEAD del contenuto
diverso, qualora un contesto di deployment dovesse mai richiederlo.
L'identificatore aes-256-gcm
(NIST SP 800-38D) è riservato nel
registro degli AEAD a questo scopo e non fa parte di enc.scheme: 1: un record
che lo nomina segue oggi la regola della busta sconosciuta.
Introdurlo sarebbe un futuro costrutto enc.scheme: 2 che conserva i modelli
esistenti slots[] + slots_mac e dell'impegno con passphrase, ma sostituisce il
livello del contenuto, fissando per quel cifrario la nuova dimensione del chunk, la
derivazione della chiave del contenuto, la costruzione del nonce per chunk, l'AAD per
chunk e l'autenticazione del chunk finale per quel cifrario. È un profilo di
fallback, non una sostituzione: i record
enc.scheme: 1 esistenti restano validi, e il profilo non deve essere
implementato prima che esistano una definizione normativa di enc.scheme: 2 e i
relativi vettori di test.
Algoritmi di firma post-quantistici riservati
La metà KEM della traiettoria post-quantistica è inclusa in v1 (vedi sopra). La metà relativa alle firme è riservata ma non ancora implementata. Due famiglie sono candidate a inserirsi nel registro delle firme esistente non appena IETF COSE avrà stabilizzato gli identificatori degli algoritmi post-quantistici:
| Candidato | Famiglia | Standard |
|---|---|---|
| ML-DSA-65 | Reticolare (module-LWE) | FIPS 204 |
| SLH-DSA | Basata su hash, senza stato | FIPS 205 |
Poiché l'algoritmo di firma è un identificatore con nome nell'header protetto COSE, registrare un successore è puramente additivo: i record Ed25519 esistenti continuano a verificarsi, e un verificatore che non riconosce un nuovo algoritmo di firma segnala un algoritmo non supportato anziché rifiutare l'attestazione sul contenuto. Una firma non riconosciuta non invalida mai la prova di esistenza sottostante. Vedi Firme.
Un possibile percorso di pubblicazione v: 2
Le singole aggiunte, un nuovo KEM, un nuovo AEAD del contenuto, un nuovo algoritmo
di firma, sono voci di registro che non modificano lo schema del record di primo
livello. L'aggiunta di un KEM in particolare è una voce di registro sotto
enc.scheme: 1, non un incremento dello scheme; un incremento di enc.scheme è
riservato a una modifica del costrutto che attraversa più KEM (un nuovo
slots_mac o AEAD del contenuto che si applica a tutti i KEM in una volta sola).
Se si accumulano abbastanza candidati che modificano lo schema del record, la
modifica cumulativa potrebbe giustificare un record di primo livello v: 2
pubblicato accanto a v1. Entrambe le versioni resterebbero schemi di metadati
validi sotto la label 309; un verificatore sceglie in base al discriminatore v
all'interno del record. I passi del percorso di standardizzazione si ripetono per
la nuova revisione. È l'evoluzione di portata più ampia e si attiva solo per
accumulo: nulla di quanto riportato qui è pianificato.
Risoluzione opzionale della sostituzione a un salto
Il campo opzionale supersedes di un record punta a un record precedente tramite
l'hash della transazione. Risolvere quel puntatore è opzionale per un
verificatore. Un verificatore che conferma che supersedes è strutturalmente un
hash di 32 byte ma non recupera la transazione precedente è conforme, ma perde
l'occasione di portare alla luce la catena di sostituzione. Indicazione: un
verificatore PUÒ risolvere un salto, cioè interrogare di nuovo il resolver
delle transazioni per l'hash riferito e riportarne l'esistenza e il block time
(l'orario del blocco), senza spingersi oltre con la ricorsione. Un salto è
sufficiente; l'attraversamento più profondo è responsabilità del chiamante, e la
sostituzione non revoca mai il record precedente, che la blockchain mantiene
verificabile in autonomia per sempre.
Migrare una costante crittografica
Ogni costrutto stabilito qui sopra dipende da costanti con nome: identificatori di algoritmi, stringhe info HKDF, salt dei KDF, lunghezze del nonce AEAD, label di separazione di dominio. Cambiare il significato di una qualsiasi di esse è una rottura del formato wire, e lo standard prescrive un unico percorso rigoroso per farlo. La regola che governa il tutto: usare la modifica di portata più piccola che risolve il problema, e non cambiare mai in silenzio il significato di una costante esistente sotto lo stesso namespace.
La procedura è additiva e retrocompatibile (i record precedenti continuano a verificarsi sotto le costanti con cui sono stati pubblicati) e procede per portata:
-
Versionare il namespace, non il valore. Una derivazione modificata incrementa il suffisso
-vNsu ogni stringa di separazione di dominio che tocca: stringhe info HKDF (…-v1→…-v2), prefissi dei messaggi HMAC, salt e label. Una nuova costante vive sotto il nuovo suffisso; la costante precedente resta valida sotto il vecchio suffisso. I verificatori più vecchi rifiutano in modo netto i record più recenti già al discriminatore, anziché interpretarli in modo errato. -
Incrementare il discriminatore che corrisponde al raggio d'impatto. Una modifica confinata a una sola famiglia di slot è selezionata da
enc.kem; una modifica che attraversa più KEM al livello del contenuto o all'impegno sull'insieme degli slot è un incremento dienc.scheme; una modifica allo schema del record stesso è un incrementovdi primo livello. Ogni discriminatore circoscrive la rottura al livello più piccolo che è effettivamente cambiato. -
Mantenere verificabili i predecessori. Le versioni più vecchie dei record restano leggibili come schemi congelati. Un verificatore seleziona il costrutto in base ai discriminatori di versione del record stesso, così che una singola implementazione possa verificare v1 e un futuro successore fianco a fianco. Nessun record smette mai di verificarsi perché è arrivato un successore.
Additivo, mai distruttivo
La migrazione post-quantistica è il caso canonico: un nuovo KEM o algoritmo di firma è una voce di registro sotto un nuovo namespace, selezionata da un discriminatore on-wire, con i predecessori intatti. Il design agile rispetto agli algoritmi fa sì che la migrazione sia più una registrazione che una riscrittura, ed è esattamente per questo che il KEM ibrido X-Wing ha potuto essere incluso in v1 senza disturbare il percorso classico.
Pagine correlate
- Registri degli algoritmi: gli identificatori con nome i cui namespace vengono versionati durante una migrazione.
- Sealed PoE: il KEM ibrido X-Wing, il binding della
trascrizione di impegno della chiave e i discriminatori
enc.scheme/enc.kem. - Firme: la verifica rigorosa di Ed25519 e il registro delle firme a cui si unirebbero gli algoritmi post-quantistici riservati.