--希望这个问题适合这里--
一次又一次,总有一个人问要建立他们自己的加密标准/密码,我们都同意尽早阻止他们,因为我们都同意这样做是非常不明智的(例如防止他们的标准中的未知或无形弱点,等等)。
我好奇的问题是:用你选择的语言来编程你自己的库,比如说AES密码,怎么样?它不是创建新的密码(仍然严格遵守AES密码/算法),而是用您选择的编程语言(可能在C/C++中再次使用AES密码,这样我们就可以在新的gen中使用新特性(S)并使其更快,->只是一个例子),或者某个人构建了一种没有AES库的新编程语言(而且您希望提供一个库)。这样做是否仍然明智呢?
发布于 2020-09-29 11:55:25
用你所选择的语言编程你自己的库,比如说AES密码怎么样?
以正确的方式实现AES并不难。规范写得很好,包含插图和中间测试向量,因此基本上任何人都可以这样做。
对于AES来说,什么是棘手的,为什么自己编写一个生产准备的实现通常是不明智的,那就是编写一个对通用软件CPU侧通道相当快和(/or)抵抗的实现。
如果您仍然希望您的语言有一个AES实现,通常的方法是使用外部函数接口调用基于C的AES库。
至于自己实现AES,如果您的语言编译成机器代码,通常会有一种方法来访问AES的本质,而通常情况下,除了不正确地允许CPU对指令进行流水线之外,没有什么可以做错的。
如果您没有机器代码编译语言和/或您的目标CPU没有硬件AES指令,事情就变得更加棘手。您需要确保用您的语言编写的东西在解释/及时编译过程中不会做一些奇怪的事情,从而意外地引入额外的说明。您需要确保实现总是花费相同的时间,而不依赖于所使用的键和数据。您需要确保上一步实际上不会受到解释器/ JIT编译器/ CPU的干扰。您还需要确保您的内存访问模式不依赖于秘密数据。这些点中的大部分都可以修复,例如使用切分的AES实现,但这当然不是一项琐碎的任务--尤其是如果您希望实现能够相当快的话。
https://crypto.stackexchange.com/questions/84234
复制相似问题