我希望你能帮我理解这个问题。我知道创建自己的加密不是你应该做的事情,但我很久以前就做了这个简单的“加密”,并与我的老师讨论过。他说它很弱,不应该在生产中使用,但是他不能真正解释为什么(或者至少我没有得到)。也许你们中的一个人会很好地帮助我。
基本概念是创建一个“无穷无尽”的散列,用于加密整个纯文本。我实现了这样的算法:
据我所知,只要我使用安全哈希算法,它就应该是安全的。请帮助我理解为什么我错了。
您可以在这里找到一个javascript实现和示例HTML页面:https://github.com/EdwardTivrusky/codebook
发布于 2019-10-22 17:27:57
根据我对您问题的理解,您的加密方案的工作原理如下:
对于由\ell块m=m_1\|\dots\| m_\ell和密钥k组成的消息,密文c=c_1\|\dots\| c_\ell计算为
c_i:=m_i\oplus H(c_{i-1},m_{i-1})代表2\le i \le \ell。
这个计划有几个问题。首先,它是确定性的,因此不能是CPA安全的,这是我们通常需要的加密方案的基本最小值。
但情况会变得更糟。在安全的任何标准定义中,假定攻击者可以选择或者至少知道明文的一部分。在您的方案中,如果攻击者知道n^{\text{th}}明文块m_n,他们就可以计算H(c_n,m_n),从而显示下一个明文块(扩展到消息的其余部分)。
https://crypto.stackexchange.com/questions/75247
复制相似问题