Come utilizzo Skein's Stream Cipher?

6

Capisco che il candidato alla competizione per la funzione hash del NIST Skein viene fornito con un codice a blocchi incorporato, Threefish, trasformato in un codice di flusso utilizzando il Blocking Iteration unico (è giusto?).

L'implementazione pyskein rende questo particolarmente facile da usare :

import os
import skein

data = b'Hello World!'
key = b'thisisasecret'
nonce = os.urandom(32)

c1 = skein.StreamCipher(key, nonce=nonce, hasher=skein.skein1024)
c2 = skein.StreamCipher(key, nonce=nonce, hasher=skein.skein1024)

print(c2.decrypt(c1.encrypt(data)))

Tuttavia, poiché l'algoritmo è relativamente nuovo, ho un intero carico di domande che culminano in "Come si usa correttamente?"

  • Quanto dovrebbe durare il nonce?
  • Devo ancora usare PBKDF2? (cioè questa cosa fa un allungamento chiave a sé stante?)
  • Devo ancora autenticare il messaggio?
  • Cosa succede se non gliene diamo un nonce?
  • Come faccio a utilizzare tutti gli argomenti facoltativi?
  • Perché dovrei / non dovrei usarlo?

Non sono un crittografo, e non sembra esserci alcuna documentazione facile da capire sulla parte Threefish di Skein. Eppure l'algoritmo sembra davvero carino. Quindi spero che tu possa aiutarmi. : -)

    
posta Stefano Palazzo 13.07.2011 - 16:30
fonte

2 risposte

8

Non dovresti ancora distribuire il software basato su Skein.

Internamente, Skein è costruito attorno a un codice a blocchi personalizzato (Threefish) che può essere usato come un codice di flusso o un MAC, ma nessuno sta ancora guardando la sicurezza intrinseca di Threefish, ma solo come fornisce una buona funzione di hash e anche per quell'uso, il verdetto non è stato ancora raggiunto. Occorrono anni di controllo per decidere che un dato algoritmo "sembra decentemente sicuro". Un primitivo one-size-fits-all ha un enorme appeal, specialmente per i sistemi embedded con spazio limitato per il codice, ma ci vorranno ancora alcuni anni prima che si possa considerare ufficialmente Threefish come sicuro. In parole povere, se Skein viene scelto come SHA-3 (entro la fine del 2012), allora è probabile che Threefish inizi a essere investigato come una primitiva di crittografia, in nel qual caso potrebbe essere dichiarato come "sembra buono" entro, diciamo, 2016. Dovrai essere paziente.

Un altro motivo per cui dovresti aspettare un po 'è che Skein e / o Threefish potrebbero ancora essere soggetti a modifiche. A intervalli regolari, i candidati SHA-3 possono essere "ottimizzati" (piccole modifiche progettate alla luce dell'analisi precedente). Skein è stato ottimizzato per il secondo turno della competizione SHA-3, quindi ottimizzato per il terzo round. Quale versione è implementata in pyskein? C'è spazio per gli incubi di interoperabilità qui.

Come per le altre tue domande:

  • Skein / Threefish non incorpora alcun allungamento automatico dei tasti
  • Skein come codice di flusso è un codice di flusso, non un codice di flusso autenticato . Fa solo la crittografia. La matassa può anche essere usata per calcolare l'autenticazione (come un MAC) ma ci possono essere problemi da prendere in considerazione se si desidera utilizzare la stessa chiave per entrambi gli usi (cioè non farlo se non si è sicuro che sia sicuro, e francamente non ne sono sicuro)
  • Il "nonce" dovrebbe essere una stringa arbitraria, non molto limitata. Nella descrizione generale di Skein, il nonce e il messaggio di hash (quando si esegue l'hashing) usano gli stessi meccanismi di input. La matassa come codice di flusso è "solo" una funzione di hash con un tasto, nessun input, ma un output molto lungo.

Naturalmente, pyskein potrebbe aggiungere limitazioni arbitrarie, quindi ti rimando alla documentazione di pyskein, se esiste.

    
risposta data 13.07.2011 - 17:36
fonte
4

Sono completamente d'accordo con @Thomas. A questo punto non dovresti usare la matassa.

Suggerisco invece di utilizzare la crittografia AES-CBC o AES-CTR, insieme al codice di autenticazione dei messaggi CMAC, in modalità encrypt-then-authenticate.

    
risposta data 15.07.2011 - 08:20
fonte

Leggi altre domande sui tag