滑鼠熵池

滑鼠熵池

在下方區域晃動滑鼠或手指,每個移動事件的座標和時間會被混進一個 320 位元組的隨機池。收集夠了就雜湊成 256 位元的種子。做法仿照 TrueCrypt 一類軟體建立加密磁碟時「請隨機移動滑鼠」的步驟。

收集區

在這裡晃動滑鼠或手指

估計熵0 / 256 bit
事件數
0
池混合次數
0
下一個寫入位置
0 / 320

「模擬腳本直線移動」會送出等速直線、固定間隔的事件。池照樣被寫入,但估計熵幾乎不會增加。

隨機池

320 位元組

      

每個位元組是舊值加上新資料。寫滿 320 位元組後,用 SHA-256 把整個池混合一次。較亮的位元組是剛寫入的,底線標出下一個寫入位置。

種子輸出

來自 crypto.getRandomValues,也就是作業系統的亂數產生器。建議保持開啟。

由種子展開:SHA-256(種子 ‖ 計數器) 的前 32 位元

    運作方式

    1. 取樣每個 pointermove 事件記下 x、y 座標和微秒級時間戳,共 8 位元組。
    2. 寫入這 8 位元組逐個加到池中的下一個位置,與舊值相加而不是覆蓋,新資料不會洗掉舊熵。
    3. 混合寫滿一圈後,對整個池做 SHA-256,再把雜湊結果逐段 XOR 回池裡。
    4. 輸出把池再雜湊一次,得到 256 位元種子。可再混入系統隨機數。

    熵估計是保守的啟發式,看的是軌跡的加速度和事件間隔的變化,每個事件最多記 3 bit。等速直線的事件估計接近 0,真人手勢約有 1 到 3 bit。

    這是教學示範。實際產生密鑰時直接呼叫 crypto.getRandomValues(),瀏覽器背後的作業系統已經收集了比滑鼠更可靠的熵。