日报标题:在魔方上写一个故事,转啊转,希望你看不懂我的秘密 吳易易,不要问我是怎么知道的! 一句话结论 存在,但是几乎无法构造出安全的加密算法。 简单解释 首先值得注意的是,魔方的转动本质上可以表示为一个张量或者放到一个交换群中表示。所以这是个对称加密方法,本质上和 AES 加密的 sbox 混淆是没有区别的,都是一个单射函数。 但是 AES 并不使用 sbox 本身作为密钥,而魔方群加密则使用单射函数的分解作为密钥。 这也就注定了前者是相对安全的,后者是相对不安全的。 魔方群 一般来说,为了构造一个加密算法,我们需要有一定的数学工具来表示我们的算法。对魔方而言,我们可以将对魔方的打乱看做一连串的旋转。我们会发现每次旋转都会把一些颜色块挪到另一个颜色块的位置上去。而且满足下面的性质: 色块的数量不变 每个色块在变换前后都存在唯一的位置,既不会分身也不会消失 所以魔方的旋转操作可以表示为一个置换群。 既然他已经是个置换群了,那么就和一般的置换加密没区别了。 当然我知道,你肯定还不死心,魔方有神奇的魔法,一定和那些妖艳的密码本不一样。 所以我们来设计一下算法原型: 1 假设一个白色理想三阶魔方,通过往魔方上填写明文然后旋转魔方的方法加密。 旋转的时候我们使用标准的记法来表示我们的旋转: R 表示面对右边的面顺时针旋转 90 度 R‘表示面对右边的面逆时针旋转 90 度 同理,L 是左面,U 是上面,D 是下面,F 是正面,B 是背面 比如我们这个可爱的三阶魔方有 6 个面每个面 9 个小格子。每个小格子写一个字。一共 54 个字: “我喜欢一个姑娘,她笑起来很甜,每年我们一起吃一顿饭,聊聊闲天,我以为这样就可以只如初见,但最后还是天各一方。” 然后我们的加密方法是 RUUR'U 首先我们把他们分组: 我喜欢 一个姑 娘,她 笑起来 很甜, 每年我 们一起 吃一顿 饭,聊 聊闲天 ,我以 为这样 就可以 只如初 见,但 最后还 是天各 一方。 然后旋转魔方默念咒语:RUUR'U 嘛哩嘛哩哄! 天一起 一个可 娘,就 们喜还 闲甜, 聊年我 年很笑 吃一顿 饭,聊 就一见 ,我以 为这样 欢姑她 可如, 我初但 最后起 是天各 一方。 虽然有点不太好的感觉,但是还是把他们写成一串看看吧: 天一起一个可娘,就们喜还闲甜,聊年我年很笑吃一顿饭,聊就一见,我以为这样欢姑她可如,我初但最后起是天各一方。 。 。 。 这加密了个屁啊,孙子辈的都能看出来是个十动然拒的故事了啊。妈的智障。 首先,密钥的长度太短了,不构成一个有效的加密方法。所以我们换一个长一点的 比如三阶魔方公认的十五步打乱公式之一: U2 R' D2 F D R' U' D F' L R U' F D' F' 打乱之后就变成了这样: 最,饭,个,还,就我吃一放甜一天一欢为闲天一一姑但以出我年样很我喜们是每见只聊各如,娘顿。欢放起这天一我年每 。 。 。 搞毛啊,一眼还是能看出来是个十动然拒的故事啊,一开头那么多一,一看就是个注孤生的故事啊。这特么长了根本没有卵用啊。 ops! 无法承受统计攻击 上面这个例子充分体现了置换加密的通病,我们只需要简单地使用统计工具就可以轻松解决掉魔方加密。常见的统计攻击方法比如: 频率攻击:就是我计算一下整个文本中的文字频率,再根据常见的词汇组合来还原原文。 语义攻击:比如我看见这个句子里都是什么一,喜欢,吃,我,她这样的字眼,很容易就推断出这密码的原文是个吃货十动然拒注孤生的故事。 既然我们已经知道了算法的弱点,小修小补一下是不是就可以了。 比如我们使用随机数加密一下原文再拿到魔方里混淆。 听起来不错。 比如: Every human being has a basic instinct: to help each other out. 通过魔方加密之后: ics uacsievt o hbhere l n hmi nienueoottghht ca:.anytrpsaEba 再用随机字符串加密: ponattus nnhoha sa a b aaratbr hig uoh ma yhonrs seo o ybiu 哈哈哈哈哈哈!妈妈都认不出来啦! 且慢! 我们需要还原这个密码太复杂了! 你看,对方为了解密我们的密码,需要把两个密钥, 一个随机串 hhiepo oEh.te ap:n ovh i ao h oh abn.mhEcnE s huonmcthn tcr u 还有个置换群算子 U2 R' D2 F D R' U' D F' L R U' F D' F' 特么比原文还长了好吗! 仔细一想还的确是这么回事。 我要使用魔方加密的话,密钥是旋转动作串。 一共有 6 个面,一正一反一双一共 18 个动作。 精简一下不要 180 度表示法也有十二种动作, 至少要 4bit 来表示,一个足够强的密串需要 15-20 次操作,也就是至少 60bit。 而明文空间只有 54bit..... 高维度空间的时候只能让这件事变得更糟糕.... 我觉得说道这里就已经没救了.... 毕竟,如果用 奇数阶魔方的话中心块是不会变的, 偶数阶魔方的话也是存在隠式不变形的。 也就是说,魔方置换群甚至不能算作一个合格的置换加密方法。 但是老师,我还想再给力一点。比如作为一个核把加密算法设计成非对称加密? 同学...你的出发点是好的。但是这样的话我们就面临了两个困境: 首先,加密步骤中起到保密作用的是非对称变换,比如离散对数变换,而不是魔方置换群。 其次,魔方置换群的密钥长度增加并不能有效地增加加密算法的保密性。 毕竟 3 阶魔方 15-20 次就已经完全混淆了,4 阶需要 40-50 次打乱。 总体上来看,混淆极限是和阶数的平方正相关的。这个增长速度太慢了。 老师,我觉得高维度魔方应该还可以抢救一下 那我们需要把刚才讨论的问题再拿出来说一遍,别的我就不废话了。 一句话按死你: 随着魔方维度的增长,明文空间的增长速度和一个单元密钥占用空间的增长速度是一致的。最后还会导致总结中的致命缺陷 2。 总结 使用魔方置换群作为加密算法会面临以下问题: 1 置换加密通病 2 明文空间有限,密钥比明文长 3 置换群存在不变形陷阱 4 密钥长度增加并不能有效提高保密性 结论 这个加密方法并不安全,用来表白应该不错。 延伸阅读 【0】安全性 :在有限专家间评议加密算法是不是比直接公开更安全? - 网络安全 【1】置换群 :Permutation group 【2】AES 加密: Advanced Encryption Standard 【3】置换加密: Transposition cipher 【4】对称加密: Symmetric-key algorithm 太晚了,我先睡了,想到什么明天再补充好了 阅读原文