AFAIK, tali valori "magici" hanno le seguenti due proprietà:
- Sono in qualche modo unici e sembrano casuali.
- Possono prendere parte a operazioni algebriche ripetutamente; cioè anche dopo aver applicato alcune operazioni specifiche (ad esempio moltiplicazione o esponenziazione) più volte, il valore "magico" è ancora in grado di generare nuovi valori.
È possibile trovare un caso simile nell'MD5 . Considera la seguente riga:
k[i] := floor(abs(sin(i + 1)) × (2 pow 32))
Qui, ha lo sin(i + 1)
scopo di generare valori magici; che sono unici, dall'aspetto casuale, e possono funzionare per molti i
. (In realtà, i
varia tra 0..63).
Modifica: leggendo il documento originale su TEA , si comprende che la risposta data da "Steven Stadnicki" è corretta. Nota che la costante magica è delta del nome:
Un diverso multiplo del delta viene utilizzato in ogni round in modo che nessun bit del multiplo non cambi frequentemente. Sospettiamo che l'algoritmo non sia molto sensibile al valore di delta e dobbiamo semplicemente evitare un valore negativo. Si noterà che il delta risulta essere strano con il troncamento o l'arrotondamento più vicino, quindi non sono necessarie ulteriori precauzioni per garantire che tutte le cifre della somma cambino.
Poiché vengono utilizzati solo 32 multipli di delta (uno per round), non è strano che l'algoritmo non sia molto sensibile a nessun delta specifico. (Vedi la risposta di Steven Stadnicki per maggiori informazioni.)
Modifica 2: Per inciso, MD4 usa radici quadrate di 2 (0x5a827999) e 3 (0x6ed9eba1) come costanti "magiche" nelle sue operazioni. La sezione 5.4.4 del libro Network Security: Private Communication in a Public World spiega bene questo:
Per dimostrare che i progettisti non hanno scelto intenzionalmente un valore diabolico della costante, la costante si basa sulla radice quadrata di 2.
Questa spiegazione è la stessa del punto riportato di seguito in un commento di Gilles.