跳至內容

「粒子探測器」:修訂間差異

增加 1,672 位元組 、​ 2024年9月2日 (星期一)
(建立強子對撞機粒子探測器條目)
 
行 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的隨機數生成過程。
142

次編輯