Gameboy高级加密通过其串口发送的数据。它组合一个随机数来种子一个线性同余生成器。然后,它对这个PRN、数据、对称密钥和文件中的字节偏移量进行PRN处理。
是否有理由这样做?接收方必须知道字节地址,因为它需要知道迭代LCG的次数。
(有关该算法的描述,请参见这里。)
我试图确定该算法是流密码还是CTR模式下块密码的某个版本。
发布于 2017-12-20 06:43:11
引用链接的来源:
如果normal_mode然后c=C387h:x=C37Bh:k=43202F2Fh if multiplay_mode然后c=FFF8h:x=A517h:k=6465646Fh m=dword(pp,cc,cc,cc):f=dword(hh,rr,rr,rr,对于ptr=000000C0h to (file_size-4)步骤4 c=c xor dataptr:对于i=1 to 32:c=c shr 1:如果进位,则c=c xor x:next m=(6F646573h*m)+1 send_32_or_2x16 (数据ptr xor (-2000000h-ptr) xor m k)下一个c=c xor f:代表i=1 to 32:c=c shr 1:如果携带,那么c=c xor x:next m= (c) pp调色板_data cc随机client_data1.3从从1-3,如果从服务器不存在,则为11h+client_data1+client_data2+client_data3.,FFh
我把这个问题理解为问xor (-2000000h-ptr)的角色。
它通过默默无闻来发布一小层安全信息,但从密码学的角度来看并没有加强算法,因为被动窃听者只需计算交换的八进制数就可以知道ptr。
该算法是用于加密的流密码(该密钥流作为线性同步器m、上述(-2000000h-ptr)和密钥k的异或);以及用于完整性的MAC (使用由x定义的具有反馈多项式的循环冗余校验c )。整件事更多的是通过默默无闻而不是真正的秘密。
更新:ptr术语不能自然地被视为CTR运作模式CTR运作模式的计数器。为此,我们需要密钥流的块作为键和计数器的函数来快速表达,而不需要其他内部状态按顺序演化。这里还有其他这样的内部状态m。否则,就很容易将在CTR模式下工作的密码转换为直接访问,当这里迭代的LCG使得这很不容易。我看不出在任何模式下把这看作是块密码的自然方式。
另一方面,如果我们真的想这样做,可以将LCG m的状态表示为ptr的当前值和初始m0=dword(pp,cc,cc,cc)的函数F,然后密钥流变成(-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
复制相似问题