Symmetric

為什麼 Gameboy Advance 串列加密包含目標字節地址?

  • July 11, 2021

Gameboy Advance 對通過其串列埠發送的數據進行加密。它組裝一個隨機數來作為線性同餘生成器的種子。然後,它對這個 PRN、數據、對稱密鑰和文件的字節偏移量進行異或運算。

這有什麼理由嗎?接收器必須知道字節地址,因為它需要知道迭代 LCG 的次數。

(有關算法的描述,請參見此處。)

我正在嘗試確定該算法是流密碼還是 CTR 模式下的某個版本的分組密碼。

引用連結的來源:

 if normal_mode    then c=C387h:x=C37Bh:k=43202F2Fh
 if multiplay_mode then c=FFF8h:x=A517h:k=6465646Fh
 m=dword(pp,cc,cc,cc):f=dword(hh,rr,rr,rr)
 for ptr=000000C0h to (file_size-4) step 4
   c=c xor data[ptr]:for i=1 to 32:c=c shr 1:if carry then c=c xor x:next
   m=(6F646573h*m)+1
   send_32_or_2x16 (data[ptr] xor (-2000000h-ptr) xor m xor k)
 next
c=c xor f:for i=1 to 32:c=c shr 1:if carry then c=c xor x:next
wait_all_units_ready_for_checksum:send_32_or_1x16 (c)

 pp    palette_data
 cc    random client_data[1..3] from slave 1-3, FFh if slave not exist
 hh    handshake_data, 11h+client_data[1]+client_data[2]+client_data[3]

我把這個問題讀作詢問xor (-2000000h-ptr).

它通過隱蔽性來增加一小層安全性,但不會從密碼學的角度加強算法,因為被動竊聽者ptr僅通過計算交換的八位位組就可以知道。

該算法是用於加密的流密碼(密鑰流獲得為線性同餘生成器的 XOR m,上述(-2000000h-ptr)和密鑰k);c和一個用於完整性的 MAC(使用帶有定義的回饋多項式的循環冗餘校驗x)。整個事情比真正的加密更安全。

更新:該ptr術語自然不能視為CTR 操作模式的計數器。為此,我們需要將密鑰流的塊表示為密鑰和計數器的函式,而無需其他內部狀態按順序演變。這裡我們還有其他這樣的內部狀態m。否則說,很容易將在 CTR 模式下操作的密碼轉換為直接訪問,而這裡迭代的 LCG 使這變得不安。我認為在任何模式下都沒有自然的方式將其視為分組密碼。

另一方面,如果我們真的想要這樣,可以將 LCG 的狀態表示為目前值和初始值的m函式,然後密鑰流變為,或F``ptr``m0=dword(pp,cc,cc,cc)``(-2000000h-ptr) xor F(ptr,m0) xor k $ E_{(\mathtt{m_0},\mathtt{k})}(\mathtt{ptr}) $ , 我們有一個帶有分組密碼的 CTR 模式 $ E $ ,其明文輸入的擴散極弱。如果我們以迭代方式實現,那將是非常低效F的,但有一些方法可以解決。

引用自:https://crypto.stackexchange.com/questions/54101