Esistono formati meta / formati / schemi (correttamente specificati) per descrivere strutture di messaggi crittografici?
Sto cercando un modo per descrivere il formato (dove alcuni canali potrebbero desiderare codifica simmetrica / asimmetrica o firme) che non è solo "Questo usa lo schema # 5 - vedi i documenti per altro".
Avendolo leggibile dal computer vorrei farmi un po 'di complicazioni - cose come dedurre programmaticamente quali informazioni devono essere pre-condivise affinché lo schema funzioni, deducendo quali parti del messaggio hanno integrità, producendo un report delle proprietà dello schema (compresi gli errori dovuti a un'insufficiente imbottitura, ecc.) - ma mi sembra anche più semplice avere un linguaggio per esprimere le cose.
Come esempio illustrativo (non sintassi reale!), qualcosa del tipo:
-
random-iv[128] + CTR[AES](shared-secret[256], iv, message)
- IV, seguito dal messaggio codificato AES-256-CTR (segreto condiviso non specificato) -
message + your-key[2048].public + RSA[DECODE](your-key[2048], random-padding[256] + SHA256(message))
- messaggio seguito da chiave pubblica e firma RSA dell'hash SHA-256 -
HMAC[SHA256]({0x123456...}, message) + message
- HMAC prima (segreto come letterale), concatenato con il messaggio -
RSA[ENCODE]({0x...my-key-literal}, random-iv[128] + random-key[256]) + CTR[AES](random-key[256], random-iv[128], message)
- specifica la mia chiave di crittografia e usa AES-256 per il messaggio con la chiave casuale
Se non ci fossero valori codificati (ad esempio il segreto HMAC non fosse un valore letterale), descriverebbe lo schema generico.
Con i valori codificati puoi descrivere i dati attesi su un particolare canale e persino verificare che si tratti di un sottoinsieme dello schema generico.
Questo è leggermente analogo a cose come ASN.1 per i dati strutturati (che ti permette di descrivere la struttura interna di un flusso binario, e anche il layout bitwise quando combinato con qualcosa come PER), ma forse più come un'equazione / funzionale -espressione, con primitive crittografiche e sconosciute ecc.
Sembra che dovrebbe essere possibile, ma non ho trovato nulla. Esistono metadati esistenti per questo per crypto?