【发布时间】:2016-05-04 01:23:36
【问题描述】:
我会解释我打算做什么。我有一个函数或一组代码行(在 C 中)要保护 - 基本上没有人应该修改指令。所以,我有一个代码(称为校验和保护),它对从 C 文件生成的 x86 汇编代码进行操作。它从该程序集中拾取一条指令,将其添加(或应用弗莱彻算法或任何其他函数)到校验和值(最初为 0),直到所有指令完成为止。然后查看是否有任何指令被篡改,我将所有指令的加法(或 fletcher 等)与预先计算的校验和值进行对比。哪些方法适合这种情况?
这里是讨论这种技术的研究论文:
https://www.cerias.purdue.edu/assets/pdf/bibtex_archive/2001-49.pdf
这里是守卫模板:
guard:
add ebp, -checksum
mov eax, client_addr
for:
cmp eax, client_end
jg end
mov ebx, dword[eax]
add ebp, ebx
add eax, 4
jmp for
end:
【问题讨论】:
-
Fletcher 的校验和不是安全校验和(您将“安全”作为标签之一)。它提供了一些针对随机错误的保护,但没有针对恶意攻击的保护,因为任何攻击者都可以修改您的数据并为他的修改计算相应的校验和。如果您需要安全校验和,则需要消息验证码 (MAC) 或数字签名。要回答您的问题,从数学角度来看,我确实认为 256 比 255 更好。
-
我修改了问题,因此描述发生了变化。我阅读了有关消息身份验证的信息,其中提到 MAC、数字签名和真实加密是可行的方法。你觉得最好的方法是什么?