2594浏览
查看: 2594|回复: 1

[讨论] 做了个恩尼格玛密码机

[复制链接]

【本内容参加了#REMAKE再造#创客挑战赛
,现在转帖分享】原贴地址:https://makelog.dfrobot.com.cn/article-309589.html,希望下载附件的读者可以移步下载

REMAKE再造#创客挑战赛正在进行中,欢迎各位前往摔砖挑战。

凡事都有个动机当看到REMAKE再造这个主题时,第一反应就是想到这个密码机。当初“从文字意义上进入创客圈”的其中一个作品就和它有关,虽然那是纯软件的算法。而网上爬虫搜索填充的各种科技文章中,写如何DIY恩尼格玛机的那篇,也许也加了来自oszine的,实际上是出自在下的翻译。话说当时闯北京的时候,这相当于半天房费的抵扣……
(英文原稿:https://www.instructables.com/Make-your-own-Enigma-Replica/
MonJanuary-202101181325..png

对加解密的兴趣,尤其是加密,主要来源于这是一种堂而皇之保密的技术。就比如我自己学英语的最大动机不是为了和老外交流,也并非为了看各种科技文档说明书,而是它能限制一部分人与我共享信息,而别人想要得知其中的秘密,就得付出学习成本或者翻译成本。同理,日语也是如此。总之,加密解密用起来,简直是“不管你懂不懂,反正我是懂了”这种贼兮兮偷着乐的乐趣。

现代常用的加密技术已经发展到非对称加密、公钥私钥这些算法,而加密学这学问,简单到只要拿着笔和纸就能开干。而稍微不怎么烧脑的经典对称密码当中,恩尼格玛绝对占据泰斗地位,它让加密解密变得像对话一样方便。特别在二战后期纳粹德国技术兵员打少减少的情况下,祭出一款配合电传打字机的恩尼格玛改型机,真将“自动化黑科技”和用户友好这两个完美结合在一起。

那就复刻吧。只是脑子当中有若干条复刻实现方式,实在是难以取舍。这里先挑一些特征性的和主干性的,让大家帮忙提个意见,觉得哪种比较合意。

这是一篇半互动的记录文,会充斥着各种细节考虑、推理过程。到最终定稿是否要修改成“卖相比较好”的规范文,还在纠结中。
先放上一幅恩尼格玛M4海军型机器的图,来源于密码博物馆。https://www.cryptomuseum.com/

原理恩尼格玛是对称密码算法的经典之一。每按一次按键,加密替换表会自动移位是它的关键。移位、替换这些方式在今天加密解密当中已经属于很基础的技巧,但是就如同“黑科技”是众多“白科技”叠加而来,叠加多了白的也变黑了那样,初代的恩尼格玛机器无论是材料上还是流程上,都决定了它的分量不轻,有50多公斤。哪怕后来军用版本简化了,到最后最轻便的海军型,也超过10公斤。这个分量块头当中,其实就包含了这部分不占重量的流程,需要占重量的结构零件来实现整个加解密过程。(具体详细流程可以找百科、百度上也能搜索到。在之后制作过程中,看时间我也会慢慢补全。)

·我们把加密过程看成一条算式,有点长。

每个密文字母=键盘跳线逆替换(第一位转子内字母逆替换(第二位转子内字母逆替换(第三位转子内字母逆替换(反射器(第三位转子内字母替换且如果第二位转子转满一周后自己就转一格(第二位转子内字母替换且如果第一位转子转满一周后自己就转一格((第一位转子内字母替换并转动一格(键盘跳线替换(每个明文字母))))))))))

有点头大了吧?我们缩短一下说法。

Cn=rp(r1(r2(r3(RF(R3(R2(R1((RP(Pn))))))))))    大写函数为正向,小写为逆向。RP是替换,R是转子,RF是反射器,C是密文,P是明文。
数一下括号,一共有9对。正好以反射器为中心两边流程一样,顺序对称。这在密码学当中实际上是犯忌的。假设指挥部一大清早就被生擒了,在没更改过转子顺序的情况下,当天所有电报就透明了。只要将无线电里监听到的密文顺着顺序打一遍,直接就能还原出明文。当然,考虑到用户友好,这个缺陷就被保留下来,反正当时德军一开始就把宝压在最初几个转子的复杂程度,一副根本不担心被盟军缴获的后果。

下面贴出从密码博物馆转载的简略电路流程,你就会惊叹,原来就用简单的开关回路就能完成这一系列转换。
MonJanuary-202101186876..png

复刻方向那么既然是REMAKE再造,用什么方式好呢?先说想到的三条路子。大家有什么意见的可以在评论区留言。

1.完全复刻古老德军版的密码机基于上面的电路是如此那样的简单,完全可以撇开什么电子模块啊、硬件编程这些方式,光用激光切割机、3D打印机外加各种鳄鱼夹导线,用“三哥”布线法还是德国工程师布线法就看个人随意。为了注入灵魂,可以选用比较重的壳子、粗导线来增加重量。我能想象到的后果会是编程派深深的怨念。

2.外形和硬件编程相结合就如同上面提到的我翻译过的教程原文那样,他拿Arduino Mega2560作为实现加密功能的算法零件。以我个人看法,拿Mega来做完全是浪费,并不能榨干这个板子的潜力。接线是比较好接了,甚至还能弄出个三四十年代没有的数码管冒充辉光管的效果。比起第一个,这似乎少了该有的灵魂。为了增加质感,在寻思着是不是要在里面放铅块水泥来配重……(如果这不是线上比赛,我可能干出把这五十多公斤的东西寄到浦软,到付……)

3.纯迷你小型化电子化除了不是纯软件界面外,直接用开发板外加键盘,忽视所有复古外形,要多便携就多便携。这会让玩纯软算法的人狂喜,而且重量轻了,造价也低了。对比原始恩尼格玛当时的三万多美元,这东西完全在三十人民币内能打住。给多点制作经费甚至能造出阿瑟·谢尔比乌斯当时未成设想过的道路。

作为选择依据,我这里列出一些古老恩尼格玛没有的功能。
①加密解密时候密文或明文是用小灯泡显示的,在不加电传打字机的条件下并没有储存功能。
②电源采用4V直流电,可能是方便铅酸电池吧。而现在多数人使用的是5V、9V、12V。
③ 当时德国版本有29个字母按键,ASCII编码表当时完全没有影子。
④没有二极管,更没有三极管和芯片,连PCB电路板在当时也只是美军的专利。
⑤密码机复杂的程度看配套的转子数而定。量产下来一套就备有5个转子,然后跳出3个或4个使用。多几个转子在当时是要增加生产成本和复杂程度的。
个人选择可以采用的电路工艺直插元器件,虽然比二战时期总体先进不少,还是有种古董收音机的感觉。
贴片元器件,能够紧凑尺寸,焊接也不是想象中那么困难。(一把热风枪外加锡浆就好)

经过若干小时的纠结、微信圈子内的各种意见,我采用了大部分类似第二种方向做法。为什么是“大部分类似”呢?之后看一张设计性能对比表就知道了。先说不采用其他两种的原因。
第一种最简单,我甚至都能想到如何减少重量加快进度的做法。在计算成本的时候就把它否决了,缺点在转子结构身上。即便使用了借助嘉立创生产PCB方式生产转子外形,把对方服务当成CNC来用,转子触点则是成本上升的主因——只能采用弹簧探针滑动,而每个探针价格比排母贵多了。
第三种其实最便宜,但是我不想做出这么“没有灵魂重量的东西”,就和手机APP恩尼格玛模拟器没差别了。
那么就说一下基于第二种思路而来的设计和上世纪原版恩尼格玛性能上的对比吧。(第一列是谢尔比乌斯的,第二列是我的。)

电源:4V DC       5V DC,配边充边放电池模块
转子数量:海军型4个转子+1个反射器,陆军型3个转子+1个反射器 3个转子+1个反射器备选转子数:5个5个存储在内存中,另可自行刷写26!(403,291,461,126,605,635,584,000,000,约403百亿兆)种可能的转子。
输入跳线板选择 0~13对两两字母交换方式
0~13对两两字母交换方式
显示方式:灯泡对应密文显示
LED对应密文显示,可选择用OLED输出
存储密文方式:另行笔记  搭载TF卡模块

在结构方面,上世纪的采用打字机方式的硬件外形结构,我这里用画电路板外加板件连接方式实现。将电路图用设计制版软件画好,预留板连接件——排针排母位置,用于结构连接和信号传输。,实现恩尼格玛的功能主体。事不宜迟,先从选材、电路等硬件方式叙述制作过程。作品一直在完善,所以现在先出个阶段性总结教程出来。

步骤1

材料清单

1xArduino Nano
6x74HC4067N
26x10mm LED 白发红
27xPBS-305复位按钮
33x10K电阻
26x1K电阻
26x1N5819
26x1N4730A
1x有源蜂鸣器
1xTP4067模块
60xDC005插头5.5-2.1mm
52xDC-022插座5.5-2.1mm
1xDC-002插座
1xUSB-DC002电源线
1xTF卡模块
1x128MB TF卡
1x1.3" OLED
2x15P单排母
1x4P单排母
1x6P单排母
2x6P单排针
1x2*40P双排弯针
4x2*3P双排母
2x2*7P双排母
2x2*6P双排母
6xDIP-24插座
2xSMTS-102C3
1x锂电池400mAh
1xPJ-313
6x104瓷片电容
1x470uF电解电容
6x黑色导线
1xPCB电路板(嘉立创打板)
1x3mm厚木板(用于激光切割外壳)

这里可以弄个极限挑战。我自己做的时候,有部分用的是拆机件或者周边能搜集的零件。上面材料表里的只是参考出处。大家可以做个成本极限挑战。我的空电路板、外壳木板花费差不多90元,而上面这批东西的价格也就一百二十多元。(大的电路板做不起,还是在A4尺寸左右好了。)

步骤2

电路图

这个电路总图比较复杂。大家可以看出26个字母键盘用了大量“按键+插座+二极管”的排列。具体设计思路在跳线板步骤说明。

插线板制作

MonJanuary-202101183371..png
MonJanuary-202101188237..png
FgOWRfS0REed-ohsIWW91NOzpGtN.jpg
MonJanuary-202101186935..png

跳线板的作用是将输入的按键预先进行一次字母交换达到初步迷惑的效果。在密码博物馆网站里,着重提到了跳线插头的结构。这个插头每端有两个接线柱,两边接线柱互相交叉绕接。而跳线板插座在没有插入跳线时,上下两个插座是导通信号的。当插入接线柱之后,接线柱把底部导通的弹簧板顶下,上下两个插孔不再导通信号,改走跳线,然后到达目的地的下插孔。这个设计,我直接想到的就是拿现在电子元件当中的DC插座替代,利用里面静触片和动触片之间的导通关系,配合DC电源插头做成跳线。不过,这个跳线里面只有一根导线,而不是现在DC线里的两根,所以我买插头,自行焊接导线。

德国人做的跳线插头外观比较好,密封外壳固定。我这里就简单用激光切割机切割木块进行固定,并标记好方向箭头。而用了立式三脚电源做的副产物,就是多出一批固定螺母闲置了。

FvnJCwmoudzp4vViyAm96DUgYtcq.jpg
Fm5t4gXYGJwfS3GrCwkLHCIdW5hT.jpg

在焊接完跳线板后,用万用电表测量上下两个排母位置是否导通,那一瞬间确实有点忐忑。万一当时检查设计图没看出来就损失大了……还好没发生。画线路图这件事,感觉真像在上海挖地铁……

附件

Schematic_steckbrett.pdf.pdf (142.74 KB, 下载次数: 24)

rzyzzxw  版主

发表于 2021-1-18 17:59:48

太厉害啦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2023 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail