我知道Python是一种强大的编程语言,但它对密码学安全吗?我的意思是,是否有可能对程序进行逆向工程(用python编写),并发现密码算法或其他东西?
发布于 2014-11-02 16:13:45
Python是一种脚本语言,所以如果您有这个程序,通常也有源代码。所以你甚至不需要逆向工程。这并不重要,原因有二:
现在,以上这些并不能直接使Python适用于密码学。密码学的主要问题之一是安全性。如果没有安全的编程环境,您就可以拥有任何加密技术,而且仍然没有安全的系统。
语言有许多构造,使它们或多或少适合于安全性和密码学,因此,我将展示一些,并说明Python的性能:
最后,总的来说,人们喜欢他们的系统是快速的。不幸的是,对于对称加密(SHA-256,AES)所需的二进制操作,脚本语言往往不够快。像Java这样的解释语言已经快得多了,但是C和程序集这样的语言要快得多(如果正确使用的话)。
对于密码学的常规使用来说,更重要的是库中提供的加密支持的成熟程度。Python有一个相对完善的密码库,名为PyCrypto,PyOpenSSL可用;然而,这些库主要是在C中实现的。这些库和其他库将讨论这里。PyOpenSSL的一个优点是应该可以安全地存储和使用来自硬件模块(例如智能卡或HSM)的密钥。
注意,当使用Python直接实现加密原语时,可能会应用侧通道。我要说的是,Python对于密码原语的快速原型来说特别好,而不是创建库。
总之,我想总结一下,Python是好的,但是对于密码学来说,如果能做出这样一种通才的声明,那就不太好了。
发布于 2014-11-02 08:54:03
密码学的要点是,即使攻击者知道,算法也是安全的。谷歌的安全通过默默无闻,看看为什么它是坏的。
我将根据otus的评论添加以下内容。Python可以反向工程,所以你不能隐藏你的算法。基本上,如果有人可以运行您的代码,他们可以反向工程算法。密码的意义在于,你可以将你的所有算法发布给世界,除非你告诉他们一些秘密密钥,否则他们就无法破解加密。
然而,在实践中,您会遇到诸如侧通道攻击之类的问题,即代码泄漏它正在处理的数据的信息。这包括秘密钥匙。这在任何编程语言中都会出现,除非您真正知道自己在做什么。如果您使用Python中的密码库,那么大多数这些问题或多或少都是库编写人员的问题,因此您需要相信他们知道自己在做什么,但是即使用户也可能以不好的方式使用库。
总之,只要您使用一个好的密码库,Python就不会比任何其他编程语言更好或更糟。然而,如果您正在考虑实现类似RSA或其他您在书/论文中找到的密码算法,那么代码很可能是脆弱的,除非您是一个专家,并且您真正知道自己在做什么。这适用于任何语言。
发布于 2015-12-10 02:14:02
首先,python被解释,并且几乎总是存在于源代码中.因此,逆向工程毫无意义。源代码已经公开了。然而,正如Maarten和Edvard所说,这并不重要。RSA算法是安全的,即使每个人都想知道它是如何工作的。
python唯一真正关心的是它具有动态类型,并且是一种托管语言,这两种语言都使得用.跑得更慢。这意味着python需要更长的时间来加密相同数量的数据。
然而,这与语言的真正“安全性”无关。Python运行相同的算法需要更长的时间,但是由于它是相同的算法,结果加密将与另一种语言的加密相同。语言对实际安全没有任何影响。
随着这一澄清,我还认为我应该处理副业攻击,这肯定是一个安全问题。副业攻击仍然是正在使用的算法问题,而不是运行它的语言。当算法没有对发送被截获消息的修改版本的攻击者充分隐藏信息时,旁线攻击可能会引起关注。例如,在大多数情况下,CTR模式AES算法具有相当强的安全性,但实际上很容易受到边线攻击。另一方面,一种更好的算法,如GCM模式AES,可以识别出它试图破译修改后的消息,并且会给攻击者提供更少的信息,使副线攻击变得不切实际。
https://crypto.stackexchange.com/questions/19959
复制相似问题