AFAIK, такі "магічні" значення мають такі дві властивості:
- Вони якось унікальні, і виглядають випадково.
- Вони можуть брати участь в алгебраїчних операціях неодноразово; тобто навіть після застосування певної конкретної операції (скажімо, множення чи експоненції) багато разів, "магічне" значення все ще здатне генерувати нові значення.
Ви можете знайти подібний випадок у MD5 . Розглянемо наступний рядок:
k[i] := floor(abs(sin(i + 1)) × (2 pow 32))
Тут sin(i + 1)
покликаний генерувати магічні значення; які є унікальними, випадковими на вигляд, і можуть працювати багато людей i
. (Власне, це i
діапазон від 0..63).
Редагувати: Читаючи оригінальний документ про TEA , ви розумієте, що відповідь, подана "Стівеном Стадницьким", є правильною. Зауважте, що магічна константа - це ім'я дельта:
У кожному раунді використовується різний множина дельти, щоб жоден біт кратного не змінювався часто. Ми підозрюємо, що алгоритм не дуже чутливий до значення дельти, і нам просто потрібно уникати поганого значення. Зауважимо, що дельта виявляється непарною з укороченням або найближчим округленням, тому ніяких додаткових запобіжних заходів не потрібно для того, щоб змінити всі цифри суми.
Оскільки використовується лише 32 кратні дельти (по одному на кожен раунд), не дивно, що алгоритм не дуже чутливий до будь-якої конкретної дельти. (Див. Відповідь Стівена Стадницького для отримання додаткової інформації.)
Редагувати 2: Між іншим, MD4 використовує квадратні корені 2 (0x5a827999) та 3 (0x6ed9eba1) як "магічні" константи у своїх операціях. Розділ 5.4.4 книги Мережева безпека: приватне спілкування в суспільному світі це добре пояснює:
Щоб показати, що дизайнери навмисно не обирали діаболічне значення константи, константа базується на квадратному корені 2.
Це пояснення те саме, що було сказано нижче в коментарі Жиля.