AFAIK, các giá trị "ma thuật" như vậy có hai thuộc tính sau:
- Họ bằng cách nào đó độc đáo, và nhìn ngẫu nhiên.
- Họ có thể tham gia vào các hoạt động đại số nhiều lần; tức là ngay cả sau khi áp dụng một số thao tác cụ thể (nói phép nhân hoặc lũy thừa) nhiều lần, giá trị "ma thuật" vẫn có thể tạo ra các giá trị mới.
Bạn có thể tìm thấy một trường hợp tương tự trong MD5 . Hãy xem xét các dòng sau:
k[i] := floor(abs(sin(i + 1)) × (2 pow 32))
Ở đây, sin(i + 1)
có nghĩa là để tạo ra các giá trị ma thuật; là duy nhất, tìm kiếm ngẫu nhiên và có thể làm việc cho nhiều người i
. (Trên thực tế, i
phạm vi trong 0..63).
Chỉnh sửa: Đọc bài báo gốc trên TEA , người ta hiểu rằng câu trả lời của "Steven Stadnicki" là chính xác. Lưu ý rằng hằng số ma thuật là tên delta:
Một bội số delta khác nhau được sử dụng trong mỗi vòng để không có bit nào của bội số sẽ không thay đổi thường xuyên. Chúng tôi nghi ngờ thuật toán này không nhạy cảm lắm với giá trị của delta và chúng tôi chỉ cần tránh một giá trị xấu. Cần lưu ý rằng delta hóa ra là số lẻ với phép cắt hoặc làm tròn gần nhất, do đó không cần biện pháp phòng ngừa thêm để đảm bảo rằng tất cả các chữ số của tổng thay đổi.
Vì chỉ có 32 bội số delta được sử dụng (mỗi một vòng), nên không có gì lạ khi thuật toán này không nhạy cảm với bất kỳ delta cụ thể nào. (Xem câu trả lời của Steven Stadnicki để biết thêm thông tin.)
Chỉnh sửa 2: Ngẫu nhiên, MD4 sử dụng căn bậc hai của 2 (0x5a827999) và 3 (0x6ed9eba1) làm hằng số "ma thuật" trong các hoạt động của nó. Mục 5.4.4 của cuốn sách An ninh mạng: Truyền thông cá nhân trong thế giới công cộng giải thích rõ điều này:
Để chỉ ra rằng các nhà thiết kế đã không chủ ý chọn một giá trị ma quỷ của hằng số, hằng số được dựa trên căn bậc hai của 2.
Giải thích này giống như điểm được đưa ra dưới đây trong một nhận xét của Gilles.