142
次編輯
(建立強子對撞機粒子探測器條目) |
(→原理) |
||
行 14: | 行 14: | ||
== 原理 == | == 原理 == | ||
Minecraft本身運用的隨機數產生法是Linear Congruential generator(LCG)線性同餘生成器 | |||
公式為:seed_new = (seed_current * a) + b (mod m) | |||
java中使用的參數為:a = 25214903917 、 b = 11 、 m = 2^48 | |||
而最後輸出隨機種子碼,但只會有高位前32bit輸出 | |||
LCG在隨機數生成中具有一定的隨機性,但其內部的結構使得它可預測,這些可預測性可以被利用來進行破解 | |||
以下是LCG的幾個弱點。 | |||
* '''低位比特的重複性:''' 在LCG的生成過程中,低位比特往往具有高度的重複性,這代表著相同的低位比特可能會在不同的隨機數中反覆出現,Java通過僅輸出高位的32位來減少這種重複性對隨機性的影響,然而,低位的這種重複特性依然存在,在某些情況下可被利用進行破解。 | |||
* '''行列式弱點:''' 假設使用n×n的矩陣來表示LCG的輸出,其中每一行代表連續n次的LCG調用結果。當計算這個矩陣的行列式時,其結果會是k*m^(n-1)的形式,這裡的k是一個整數。如果k等於1,則這些向量可以生成LCG後續所有可能的點,這代表著這些點之間的關係是可預測的,並且可以通過數學方法來逆向推導出最初的隨機種子。 | |||
* '''網格結構:''' 當LCG的結果被繪製在二維或更高維度的空間中時,它們往往會形成一個網格狀的結構,這種結構看起來並不隨機。這種網格特性使得它在視覺上表現出規則性,而這種規則性正是在破解中所利用的關鍵。通過分析這些網格,我們可以推導出LCG的內部狀態,進而反推LCG的隨機數生成過程。 |
次編輯