对于密码学,我非常了解。我试图找到问题的答案,但是我所读的内容并不能完全覆盖我的要求。

我已经考虑过自己的加密算法(我确定并不是什么新鲜事物),我想知道为什么出于安全性,效率和其他原因而未使用这种算法。

它起源于Caesar Cipher。但是,不是将每个字母都移位13,而是每次将每个字符(使用计算机字符值)都移位一个特定值。 />
My dog's name is Rover.


我有一个数字数组:

1, 4, 3, 2


我会将M向上移动1个字符,将y向上移动4个字符,[space]乘以3,d乘以2,然后继续句子的其余部分,遍历数字数组。
,因此,该句子将转换为N}#fpk*u!rdof$lu!Vrxfv1

将数组称为“键”。除非有人知道,否则只有拥有钥匙的人才能解密该消息。数组(键)中的项目越多,从别人那里解密消息的安全性就越高。

如果我的解释不好,我深表歉意。
总结我的问题:


为什么这样不好(或不使用)
与其他加密方法相比,它效率低下/不安全吗? />谢谢。

评论

(应命名为)VigenèreCipher,它是经典密码学(以及不能被蛮力强加但仍可以使用适当方法轻易“破译”的密码学)的标准示例。

通常,创建加密算法还不错,但是如果不花时间分析或研究加密历史就假定它们是安全的,这是一个很大的风险。任何“自制”算法都不应在实践中使用,或与可能使用它的其他人共享。如果您打算继续在此领域制造算法,请在将其标记为“玩具密码”之前清楚地知道它们如何证明其安全性。在尝试向他人证明自己之前,学会证明自己是错误的。这只是我的两分钱。

对此的一种扩展可能是,如果移位编号为0-25(对于字母A-Z)和键的长度与纯文本的长度相同。那你真的会喜欢上什么...

如果您的密钥与消息一样长,那么使用具有随机数据(密钥)和异或操作的一次性键盘将更加安全,同时密钥分配仍然会遇到与当前相同的问题。如果您的密钥比纯文本短,则必须重复输入,这使您可以使用其他答案中已经提到的所有统计分析方法。

参见crypto.stackexchange.com/q/43272/2430

#1 楼

编辑:如何破解Vigenère
是的,此密码(如SEJPM所指,就是Vigenère)容易受到频率分析的影响,但Vigenère却对此有所抵触,因为普通字母并不总是被密码化为相同的密文。不可避免的漏洞源于密钥的重复性质。
假设您的消息的长度为$ N $个字符,而密钥的长度为$ k $个字符。您可能会认为,重复此键直到到达$ N $个字符,您可以获得一些“安全单位”(“这是$ \ lfloor N / k \ rfloor $倍!”)。但是,如果我知道您的信息是以这种方式加密的,那么我就对您的纯文本学到了很多。
如果我能估计您的密钥长度$ k $ $-$并且我能在Kasiski的帮助下$- $然后我可以将每个$ k $个密文字符组合在一起(例如,如果$ k = 5 $,则将第一个,第六个,第十一个字符组合在一起,然后将第二个,第七个,第十二个字符组合在一起,依此类推放入另一个区块,依此类推)。每个块都用相同的字符(密钥中的一个字符)加密。至此,简单的频率分析开始起作用。破解此密码比破解您开始的Caesar密码更困难。
我为每个“组”执行此操作,现在我已经找回了您的密钥。

拿出您的密码很酷您自己的多字母密码的想法。但是,正如评论和其他答案所指出的那样,该密码是不安全的,可以很可靠地破解。认真:仅出于娱乐或教学目的使用此密码。
1863年,Kasiski甚至知道如何猜测此密码的长度!这迫使您使密钥变得更长/更难以记住。
它非常有效;您可以使用它快速加密文本。但这是一把双刃剑:我也可以尝试快速解密它。

#2 楼

编辑:
我认为对问题的编辑使其成为视觉密码;这使我的回答在下面无效。 @galvatron答案给出了为什么vigenere不安全的合适答案。
下面的旧答案(仅适用于替换)
从总体上讲,这是一个简单的替换密码,其中每个字母都映射到另一个字母(即转移)。您的问题的答案:
为什么这样不好(或不使用)
,因为每种语言都有已知的频率分析模式。例如,在英语中e是最常用的字母。因此,如果对手使用您的算法(足够长的时间)拥有一段加密的文本,他就可以轻松知道您对每个字母使用的移位。
与其他加密方法相比,它效率低下/不安全吗?
是的,它不安全,并且可以通过统计分析轻易破坏。您也可以在最坏的情况下使用暴力破解,价格为$ 26!$。
还有其他需要考虑的问题吗?
比您的算法更好的算法称为Vigenere密码,但它也不安全。有关更多信息,请参见链接(https://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher)。

评论


$ \ begingroup $
“ d”是最常用的字母?不是“ e”? (如etaoin shrdlu ...?)
$ \ endgroup $
–user47922
17年6月7日在21:24

$ \ begingroup $
“每个字母都映射到另一个字母的位置”-但是,如果密钥长度等于消息的长度,那么频率分析将对您有帮助吗?每个“ e”将由不同的符号表示,因此您无法寻找出现最多的“ symbol”。无论如何,就实现而言,最大的问题是您的密钥大小必须至少与消息一样大,这不是很实际。
$ \ endgroup $
– noahnu
17年6月8日在0:19

$ \ begingroup $
给定的算法是Vigenere密码,该密码几乎使您所说的一切无效。它不是安全的,但不是出于给定的原因,显然表明Vigenere密码(比其本身更好)是不合适的。
$ \ endgroup $
–埃里克·特雷斯勒
17年6月8日在2:13

$ \ begingroup $
用统计分析可以很容易地打破它,但是26!不会被强行使用。超过2 ^ 88个可能的密钥。还有26!用于字母替换,而不是OP所描述的密码;他们在完整的“计算机字符”(可能是ASCII)集中使用了偏移量,并可能重复。因此256 ^ keylen个可能的键。尽管频率分析显然仍是可行之道,但对于短键而言,它实际上可能是蛮力的。
$ \ endgroup $
–雷
17年6月8日在2:30

$ \ begingroup $
错误的答案:即使问题中没有明确说明加密方法,ASCII表和示例也清楚地表明它被用作Vigenere密码(每个符号(包括空格)都移位了)。这不是一个简单的替换密码,密钥数量也不是$ 26!$。这里的支持和冗长的讨论令人惊讶-因为SEJPM已经在第一条评论中写下了正确的答案。
$ \ endgroup $
– tylo
17年6月8日在11:49



#3 楼

幼稚地将加密视为一种将消息从A发送到B的方式,这种方式无法被对手解密(至少在实践中如此)。当然,加密确实可以做到这一点,但是现代密码的作用更多。

一种常见的攻击情形是已知的纯文本攻击(KPA)。当然,如果对手已经知道整个明文,那么对其进行加密就不会有太多收获。但是,即使对手知道前一条消息的明文或仅部分当前消息的明文,安全密码仍然是安全的。

假定消息已由您的算法加密,则密文开始带有以下字节。

Pksqr,)Rkus|!


看起来很乱,到目前为止还不错。但是,如果攻击者知道收件人是詹妮,发件人很可能会用

Hello, Jenny!


从收件人的密码中减去明文的密码。密文给出以下结果。

   80 107 115 113 114  44  41  82 107 117 115 124  33
-  72 101 108 108 111  44  32  74 101 110 110 121  33
-----------------------------------------------------
    8   6   7   5   3   0   9   8   6   7   5   3   0


毫不费力地使用统计分析或密码分析技能,攻击者可以猜测密钥为8 6 7 5 3 0 9并解密其余消息。

因此,KPA抗性是当今认为密码安全的必要条件。所有现代密码都满足此要求,并且如果使用得当,则可以安全地加密包含数十亿个字符的数十亿纯文本。

评论


$ \ begingroup $
在研究现代安全性定义时,我建议将选定的纯文本攻击替换为已知的纯文本攻击,将其作为当今的绝对最低限度(适用于对称和非对称加密方案)。如果某种方案可以抵抗KPA而不是CPA,则没有人会认为该方案是安全的。
$ \ endgroup $
– tylo
17年6月9日在8:40



$ \ begingroup $
当然,但是证明密码易受KPA攻击,意味着它甚至更弱。
$ \ endgroup $
–丹尼斯
2015年6月9日14:31

#4 楼

Sari的答案很好地解释了为什么这种方法不是特别好。但是我想补充一点,如果您的数组是从一个很好的随机数源中选择的(想想放射性衰变,无线电噪声的LSB等),(至少)只要是纯文本,就不要使用它如果要加密多个消息,那么您拥有的只是一个时间垫。值得一读,因为它们在理论上是坚不可摧的,但是您必须保持密钥的安全,并且永远不能重复使用它们。

评论


$ \ begingroup $
Sari的答案未能意识到OP实际上描述的是Vigenere密码,而不是单字母替换密码。
$ \ endgroup $
– tylo
17年6月8日在11:32

$ \ begingroup $
OP提到“遍历数字数组”。那怎么会成为一次性密码?
$ \ endgroup $
– dkaeae
17年6月8日在11:39

$ \ begingroup $
@dkaeae如果数组比纯文本大(并且您没有在其他消息中重复使用同一数组),则只需使用一次。但是,这并不是OP所提供的含义,因此,实际上,这更多是由无法发表评论的人提供的评论。
$ \ endgroup $
–里克
17年6月8日在17:20

$ \ begingroup $
@dkaeae OP可能意味着“循环遍历数字数组”多次遍历该数组。或者他可能意味着他有一个循环,该循环处理纯文本的每个字符-在循环访问数组的过程中,但仅循环一次。我在OP中看不到足够的上下文来决定一种方法或另一种方法。
$ \ endgroup $
–user2460798
17年6月8日在20:44

#5 楼

这不是特别安全的原因已在此处得到很好的解释。如果您有兴趣进一步解决这些问题,这里提供了一些有用的资源来增进您的兴趣和进一步理解:


Helen Gaines,密码分析(基本密码的入门级文字以及如何破解密码(可从Dover获得)(这将向您展示如何系统地破解密码)
密码学的尼尔史蒂文森
(小说,但发人深省的想法
戴维·卡恩(David Kahn),《密码破解者》
(对政治和战争中密码发展的经典研究)
丹·博内,加密货币I(库塞拉课程,开始进入数学现代密码系统的基础-如果您愿意挣扎一点,这些骨头上会有很多肉)

如果通过这些方法,它将有更深的资源,您将有足够的能力找到下一个需要的人。期望需要一些数学基础知识,例如数论和高级代数将很重要。祝你好运,玩得开心!

评论


$ \ begingroup $
Bruce Schneier应用密码学第二版
$ \ endgroup $
– Pete
17/12/23在23:29