AFAIK, esses valores "mágicos" têm as duas propriedades a seguir:
- Eles são únicos e parecem aleatórios.
- Eles podem participar de operações algébricas repetidamente; ou seja, mesmo depois de aplicar alguma operação específica (por exemplo, multiplicação ou exponenciação) muitas vezes, o valor "mágico" ainda é capaz de gerar novos valores.
Você pode encontrar um caso semelhante no MD5 . Considere a seguinte linha:
k[i] := floor(abs(sin(i + 1)) × (2 pow 32))
Aqui, sin(i + 1)
pretende-se gerar valores mágicos; que são únicos, de aparência aleatória e podem funcionar para muitos i
. (Na verdade, i
varia de 0 a 63).
Edit: Ao ler o artigo original no TEA , entende-se que a resposta dada por "Steven Stadnicki" está correta. Observe que a constante mágica é nome delta:
Um múltiplo de delta diferente é usado em cada rodada, para que nenhum bit do múltiplo não mude com frequência. Suspeitamos que o algoritmo não seja muito sensível ao valor do delta e apenas precisamos evitar um valor ruim. Deve-se observar que o delta é ímpar com truncamento ou arredondamento mais próximo, portanto, não são necessárias precauções extras para garantir que todos os dígitos da soma sejam alterados.
Como apenas 32 múltiplos de delta são usados (um por cada rodada), não é estranho que o algoritmo não seja muito sensível a nenhum delta específico. (Veja a resposta de Steven Stadnicki para mais informações.)
Editar 2: Aliás, o MD4 usa raízes quadradas de 2 (0x5a827999) e 3 (0x6ed9eba1) como constantes "mágicas" em suas operações. A seção 5.4.4 do livro Segurança de rede: comunicação privada em um mundo público explica isso bem:
Para mostrar que os designers não escolheram propositalmente um valor diabólico da constante, a constante é baseada na raiz quadrada de 2.
Essa explicação é a mesma do argumento abaixo, em um comentário de Gilles.