鹤啸九天 自律更自由,平凡不平庸 Less is More

密码学-Cryptography

2020-05-30
鹤啸九天
阅读量

Notes(温馨提示):

  1. ★ 首次阅读建议浏览:导航指南
  2. 右上角工具条搜索文章,右下角二维码关注微信公众号(鹤啸九天),底栏分享、赞赏、评论
  3. ★ 转载请注明文章来源,知识点积累起来不容易,水滴石穿,绳锯木断,谢谢理解
  4. ★ 如有疑问,邮件讨论,欢迎贡献优质资料


总结

密码学

  • 【2020-9-19】加盐密码的通用方法
    • 现在应该很少系统会直接保存用户的密码了吧,至少也是会计算密码的 md5 后保存。md5 这种不可逆的加密方法理论上已经很安全了,但是随着彩虹表的出现,使得大量长度不够的密码可以直接从彩虹表里反推出来。
    • 要从c=hash(m)逆向得到原始明文m,有三种办法:
      • 暴力破解法:时间成本太高。
      • 字典法:提前构建一个“明文->密文”对应关系的一个大型数据库,破解时通过密文直接反查明文。但存储一个这样的数据库,空间成本是惊人的。
      • 构建彩虹表:在字典法的基础上改进,以时间换空间。是现在破解哈希常用的办法。密码破解的利器——彩虹表(rainbow table)
    • 只对密码进行 md5 加密是肯定不够的。聪明的程序员想出了个办法,即使用户的密码很短,只要我在他的短密码后面加上一段很长的字符,再计算 md5 ,那反推出原始密码就变得非常困难了。加上的这段长字符,我们称为盐(Salt),通过这种方式加密的结果,我们称为 加盐 Hash 。
      • salt可以是用户名,手机号等,但必须保证每个用户的salt都不一样才是安全的。
    • 加盐慢哈希

历史

  • 古代密码:凯撒密码,20多个罗马字母简单替换,一直用到二战(日本)
    • 凯撒密码:凯撒密码是通过将明文中所使用的字母表按照一定的字数“平移”来进行加密和解密的。
    • 简单替换密码:简单替换密码是将明文中所使用的的字母表替换为另一套字母表的密码。
    • Enigma:Enigma是第二次世界大战中德国使用的一种密码机,它是一种由键盘、齿轮、电池、和灯泡所组成的机器,通过这一台机器就可以完成加密和解密两种操作。
      • 现代计算机之父阿兰•图灵曾是破译德国密码机团队的一员。图灵在1940年研制出了用于破译Enigma的机器。
  • 艾伦·麦席森·图灵在二战期间主要负责破译德国人的密码系统Enigma,破解密码需要大量的计算,图灵深知工欲善其事必先利其器的道理,于是一台叫作CO-LOSSUS的计算机在1943年被研制出来,后来这种电子计算机总共生产了10台,他们出色完成了密码破译工作。
  • 图灵机的诞生确实加快了二战的结束
  • 图灵机也就是战胜了对称加密算法。
  • 电影《模仿游戏》,影片改编自安德鲁·霍奇斯编著的传记《艾伦·图灵传》

分类

  • 加密算法可以分成三类:对称加密算法,非对称加密算法和Hash算法。
  • 注意:
    • Base64编码只是一种编码格式并不是加密算法,它可用于在HTTP环境下传递较长的标识信息。
  • 加密算法的选择
    • 对称加密算法不能实现签名,因此签名只能非对称算法。
    • 验证文件或字符一致性用hash算法
    • 数据量大用对称加密算法、小则可以用非对称加密
    • 还可以非对称与对称集成,参考https请求原理
    • RSA建议采用1024位的数字,ECC建议采用160位,AES采用128为即可

对称加密

  • 1976年以前,所有的加密方法都是同一种模式即对称加密,特点是加密和解密使用相同的密钥
    • 用相同的密钥进行加密和解密的技术,用于确保消息的机密性
  • 优点:对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。
  • 缺点:在数据传送前,发送方和接收方必须商定好秘钥,然后双方保存好秘钥。如果一方的秘钥被泄露,那么加密信息也就不安全了
  • 使用场景:本地数据加密、https通信、网络传输等
  • 常见算法:AES、DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6
    • 目前主要使用的是AES,因为它安全、快速、而且能够在各种平台上工作。尽管对称密码能够确保消息的机密性,但需要解决将解密秘钥配送给接收者的密钥配送问题。
    • DES和AES都属于分组密码,它们只能加密固定长度的明文。如果需要加密任意长度的明文,就需要对分组密码进行迭代,而分组密码的迭代方法就称为分组密码的模式。

摩斯密码

摩尔斯电码( 又译为摩斯密码,英语:Morse code)是一种时通时断的信号代码,这种信号代码通过不同的排列顺序来表达不同的英文字母、数字和标点符号。

由美国人摩尔斯(Samuel Finley Breese Morse)于1837年发明,为摩尔斯电报机的发明(1835年)提供了条件。 由dot(.)、dash(-)两种符号组成,摩尔斯码在早期无线电上举足轻重,是每个无线电通讯者所须必知的。由于通讯号技术之进步,各国已于1999年停止使用摩尔斯码,但由于它所占的频宽最少,又具一种技术及艺术的特性,在实际生活中有广泛的应用。

摩尔斯电码morse code 它由两种基本信号和不同的间隔时间组成:短促的信号“·”,读“的”(Di);保持一定时间的信号“—”,读“答”(Da)

虽然摩尔斯发明了电报,但他缺乏相关的专门技术。他与艾尔菲德·维尔签定了一个协议,让他帮自己制造更加实用的设备。艾尔菲德·维尔构思了一个方案, 通过和中间的停顿,可以让每个字元和标点符号彼此独立地发送出去。他们达成一致,同意把这种标识不同符号的方案放到摩尔斯的专利中。这就是现在我们所熟知的美式摩尔斯电码,它被用来传送了世界上第一条电报。

这种代码可以用一种音调平稳时断时续的无线电信号来传送,通常被称做连续波(Continuous Wave),缩写为CW。它可以是电报电线里的电子脉冲,也可以是一种机械的或视觉的信号(比如闪光)。作为一种信息编码标准,摩尔斯电码拥有其他编码方案无法超越的长久的生命。摩尔斯电码在海事通讯中被作为国际标准一直使用到1999年。1997年,当法国海军停止使用摩尔斯电码时,发送的最后一条消息是:“所有人注意,这是我们在永远沉寂之前最后的一声呐喊!”

做为一种实际上已经绝迹的电码,美式摩尔斯电码使用不太一样的点、划和独特地间隔来表示数字、字元和特殊符号。这种摩尔斯电码的设计主要是针对地面报务员通过电报电线传输的,而非通过无线电波。

这种古老的、交错的电码是为了配合报务员接听方式而设计的。可以从扬声器或者耳机中听到电码的音调,你只能从这些最早期的电报机的一个机械发生装置听到嗒嗒的声音,甚至是从发送电键接听:这种电键在不发送信号时被设置为从动模式,负责发声

摩尔斯电码是一种早期的数码化通信形式, 它依靠一系列的 来传递编码信息 ,它的代码包括五种:

  • dot( · ):1 (读 “滴” dit ,时间占据1t )
  • dash(—):111 (读 “嗒” dah ,时间占据3t )
  • 字符内部的停顿(在点和划之间):0 (时间占据1t )
  • 字符间停顿:000 ( 时间占据3t )
  • 单词间的停顿:0000000 ( 时间占据7t )
  • 点的长度(也就是上面的时间长度t)决定了发报的速度

如何记忆密码本?

密码本

  • 点代表短音di,线代表长音dah。

26个字母用下图表示更清晰, 摩斯密码树

字母笔画记忆(按正常笔画顺序)

中文摩斯密码在线加密解密中直接破译

案例:SOS是怎么来的?

  • SOS并不是任何求救英文的缩写,而是因为在摩尔斯电码中,
    • S 为 . . .
    • O 为 _ _ _
  • 所以SOS对于发报方是最容易发出的信号,对于接收方是最容易识别的信号,因此国际无线电报公约组织于1908年正式将它确定为国际通用海难求救信号。

求救信号 SOS(···—···)

1912年,著名的泰坦尼克号游轮首航遇险时,发送的是CQD(英国马可尼无线电公司决定用CQD作为 船舶遇难信号),但因 D(—··)易于其他字母混淆,周围船只并未意识到是求救信号,没有快速救援,在快沉没时才使用的新求救信号SOS(···———···)发报。泰坦尼克号沉没后,SOS才被广泛接受和使用。事实上,虽然SOS信号在1906年即已制订,但英国的无线电操作员很少使用SOS信号,他们更喜欢老式的CQD遇难信号。

泰坦尼克号的无线电首席官员约翰·乔治·菲利普一直在发送CQD遇难信号,直到下级无线电操作员哈罗德·布莱德建议他:“发送SOS吧,这是新的调用信号,这也可能是你最后的机会来发送它了!”然后菲利普在传统的CQD求救信号中夹杂SOS信号。求救信号直到第二天早上才被加州人号收到,因为她并没有24小时都监听无线电 。

案例:破解爱情密码

2009年春节前俩天,2009年1月23日,农历腊月廿八。在百度贴吧上演了浪漫的一幕,一男子发帖请求吧友帮助破译一段摩尔斯密码,以获得与其心仪女子的约会机会。男主人公对他心仪已久的女生告白,女生给了一串5层加密的莫斯密码以及很少的提示。 对男生讲,只有破译了这个密码,才答应和他约会。

最近和一个心仪的女生告白,
谁知道她给了一个摩斯密码给我,说解出来了才答应和我约会。
可是我用尽了所有方法都解不开这个密码。。好郁闷阿。只能求教你们了。

****-/*----/----*/****-/****-/*----/---**/*----/****-/*----/-****/***--/****-/*----/----*/**---/-****/**---/**---/***--/--***/****-/

她唯一给我的提示就是这个是5层加密的密码..
也就是说要破解5层密码才是答案..
好郁闷阿..
救救我吧..

通过各路大神的集体智慧,“爱情密码”的答案终于水落石出,也让大家一起感受了一把 《摩尔斯电码里的爱情故事》: 爱情最好的样子,就是我爱你的同时你也爱我

【2021-11-5】这段摩斯密码代表的是什么意思?

**-/—-/—-/-/-/—-/—**/—-/-/—-/-/–/-/—-/—-/—/-**/—/—/–/–/**-/

这个是个老物了,当年的五层加密吧。解到第二层看到那熟悉的字母就知道答案是啥了。

  • 第一层摩斯电码:4194418141634192622374
    • - 第二层手机九键:gzgtgogxncs
  • 第三层QWE解密:otoeoiouyvl
  • 第四层栅栏:ootuoyevoli(这里需要注意的是,因为只有11个字母不够平分两行,所以第二行留个空)

    otoeoi
    ouyvl

  • 第五层倒序:iloveyoutoo

答案:I love you too

原文链接

(1)第一层:摩斯密码
  • 摩斯密码,破译为:4194418141634192622374
(2)第二层:替代密码之手机键盘
  • 吧友的提示确实有用,楼主在拼命破解的过程中,还是通过其他的手段得到了提示: 她说途中有一个步骤是 “替代密码” 而密码表则是我们人类每天都可能用到的东西
4194418141634192622374
毫无规律……
daiddahadafcdaibfbbcgd
仍然不对……
d4/a1/i9/d4/d4/……
……不对
对了,先来考虑考虑替换密码。
楼主顺便看看能不能套出每一层密码的提示。这个很重要
  • 一个大神出现,他发现如果将数字两两一组,
    • 41 94 41 84 41 63 41 92 62 23 74
  • 数字有偶数个,且注意到41组合出现了数次,并且个数位一直在1-4之间, 破译密码为:NwNRNjNcZfu, 又是一串毫无意义的字母,看来穷举换位也没有结果。

  • 大神【片翌天使】出现
38楼给我的提示。还是让我想到了手机。
你们看解码出来分组后的数字分别是,
41 94 41 81 41 63 41 92 62 23 74 
并且每个组合个位数都不超过4。
特别是除了十位数是7和9这两个数字后面有4以外其他的都没有4。
看图。
手机的键盘上7和9的字母也是4个的,其他的都不超过4个字母。
那么,按照上面的组合解码可得。
G Z G T G O G X N C S 
解码后我们发现每一组数字都能解释出来。
目前我只能解码到这里的。
虽然很不通顺,但我相信这里应该是个突破点。

LZ还是快点去套多点提示给我们吧。

观察该数字系列发现,每个组合个位数都不超过4,除了十位数是7和9这两个数字后面有4之外,其他的都小于4。同时还发现:手机键盘上数字“7”和数字“9”键上的字母是4个,其他的都不超过3个。考虑到发帖事件是2009年,应该智能机还未完全普及,大多数如下所示的NOKIA键盘。

  • 第一层解密:4194418141634192622374
  • 解码出来分组: 41 94 41 81 41 63 41 92 62 23 74
  • 第二层解密:G Z G T G O G X N C S
(3)第三层:替代密码之计算机键盘

还是大神片翌天使已破译,确实有代替法。而密码表确实是我们人类每天都可能用到的东西,那么很可能就是电脑键盘。 因为QWE的格式是被世人所认可的,也就有可能成为密码的码表。

我已经完全解出来了。不过我觉得还蛮有意思的。楼主委屈一下你。把这个作为题目让大家先做做吧。
另外补充一句。楼主你好幸福哦。

我迟点告诉你们答案。
我可以给你们提示的是。
确实有代替法。
而密码表确实是我们人类每天都可能用到的东西。
  • 第二层结果:G Z G T G O G X N C S
  • 第三层结果: O T O E O I O U Y V L
(4)第四层:栅栏

O T O E O I O U Y V L进行再次解码。分成两排:

  • O T O E O I
  • O U Y V L 按列从左到右,从上到下重组后,OOTUOYEVOLI。
  • 第四层结果:O O T U O Y E V O L I
(5)第五层:倒序

对第四层结果,进行倒序排列

  • 最终得到第五层结果I L O V E Y O U T O O

密码到这里就全部解密了,这个帖子确火爆了起来。整个帖子都沸腾了,好多人还留贴祝福楼主,祝福和探讨的回帖盖到了4万多楼。然而最终的方向还是乱了,在【片翌天使】破解了密码之后,大家最开始都在祝福楼主,然后突然有一个人提出,这个【片翌天使】会不会就是女主人公。所以网友大军的结论变成了:女主等不及了自己开马甲回答的,不过这样也没什么不好,反倒觉得很浪漫不是吗?

一次性密码本

  • 只要通过暴力破解法对密钥空间进行遍历,无论什么密文总有一天也都能够被破译。然而一次性密码本却是一个例外,即便使用暴力破解法遍历整个密钥空间,一次性密码本也绝对无法被破译。
  • 一次性密码本是一种非常简单的密码,它的原理是“将明文与一串随机的比特序列进行XOR(异或)运算”。
  • 在一次性密码本中,由于我们无法判断得到的是不是正确的明文,因此一次性密码本是无法破译的。
  • 由于一次性密码本存在配送、保存、重用、同步等方面的问题,所以几乎没有人应用一次性密码本,因为它是一种非常不实用的密码。

DES

  • DES(Data Encryption Standard)是1977年美国联邦信息处理标准中所采用的一种对称码。
  • DES是一种将64比特的明文加密成64比特的密文的对称密码算法,它的密钥长度是56比特。尽管从规格上来说,DES的密钥长度是64比特,但由于每隔7比特会设置一个用于错误检查的比特,因此实质上其实密钥长度是56比特。
  • 由于DES的密文可以在短时间内被破译,因此除了用它来解密以前的密文以外,现在我们不应该使用DES了。

三重DES

  • 三重DES是为了增加DES的强度,将DES重复3次所得到的一种密码算法,也称为TDEA,通常缩写为3DES。
  • 尽管三重DES目前还被银行等机构使用,但其处理速度不高,除了特别重视向下兼容性的情况以外,很少被用于新的用途。

AES

AES(Advanced Encryption Standard)是取代其前任标准(DES)而成为新标准的一种对称密码算法(Rijndael)。

  • Rijndael是由比利时密码学家Joan Daemen和Vincent Rijmen设计的分组密码算法,于2000年被选为新一代的标准密码算法——AES。
  • Rijndael的分组长度和密钥长度可以分别以32比特为单位在128比特到256比特的范围内进行选择。不过在AES的规格中,分组长度固定为128比特,密钥长度只有128、192、和256比特三种。

非对称加密

  • 1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为“Diffie-Hellman密钥交换算法”。这个算法启发了其他科学家。人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。这种新的加密模式被称为”非对称加密算法”。
    • 公钥密码(非对称密码)中,密钥分为加密密钥和解密密钥两种。发送者用加密密钥对消息进行加密,接收者用解密密钥对密文进行解密。
  • 优点:非对称加密与对称加密相比其安全性更好
  • 缺点:加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
  • 使用场景:https会话前期、CA数字证书、信息加密、登录认证等
  • 常见算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

RSA

  • RSA是一种公钥密码算法,它的名字是由它的三位开发者,即Ron Rivest、Adi Shamir和Leonard Adleman的姓氏的首字母组成的(Rivest-Shamir-Adleman)。
    • RSA利用了质因数分解的困难度
    • EIGamal方式则利用了mod N 下求离散对数的困难度
    • Rabin方式是由M.O.Rabin设计的公钥算法,利用了mod N下求平方根的困难度。
  • 加密:求“E次方的 mod N”
  • 解密:求“D次方的 mod N”

椭圆曲线密码

  • 椭圆曲线密码(Elliptic Curve Cryptography,ECC)是最近备受关注的一种公钥密码算法。它的特点是所需的密钥长度比RSA短。

Hash

  • Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。

  • 优点:不可逆、易计算、特征化
  • 缺点:可能存在散列冲突
  • 使用场景:文件或字符串一致性校验、数字签名、鉴权协议
  • 常见算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1

单向散列函数

  • 单向散列函数有一个输入和一个输出,其中输入称为消息(message),输出称为散列值(hash code)。单向散列函数可以根据消息的内容计算出散列值,而散列值就可以被用来检查消息的完整性。
  • 散列值的长度和消息的长度无关。无论消息是1比特,还是100MB,甚至是100GB,单向散列函数都会计算出固定长度的散列值。
  • 以SHA-256单向散列函数为例,它所计算出的散列值的长度永远是256比特(32字节)。
  • 为了能够确认完整性,消息中哪怕只有1比特的改变,也会产生不同的散列值。
  • 单向散列函数输出的散列值也称为消息摘要(message digest)或者指纹(fingerprint)

MD4、MD5

  • MD(Messge Digest)4是由Rivest于1990年设计的单向散列函数,能够产生128比特的散列值。现在它已经不安全了。
  • MD(Messge Digest)5是由Rivest于1991年设计的单向散列函数,能够产生128比特的散列值。MD5的强抗碰撞性已经被攻破。也就是说,现在已经能够产生具备相同散列值的两条不同的消息,因此它也不安全了。

SHA-1、SHA-256、SHA-384、SHA512

  • SHA-1是由NIST(美国国家标准技术研究所)设计的一种能够产生160比特的散列值的单向散列函数。现在已不推荐使用。
  • SHA-256、SHA-384、SHA512都是由NIST设计的单向散列函数,它们的散列值长度分别为256比特、384比特、和512比特。这些单向散列函数合起来统称SHA-2。
  • SHA-1的强抗碰撞性已于2005年被攻破,不过,SHA-2还尚未被攻破。

RIPEMD-160

  • RIPEMD-160是于1996年由Hans Dobbertin、Antoon Bosselaers和Bart Preneel设计的一种能够产生160比特的散列值的单向散列函数。RIPEMD-160是欧盟RIPE项目所设计的RIPEMD单向散列函数的修订版。
  • RIPEMD的强抗碰撞性已经于2004年被攻破,但RIPEMD-160还尚未被攻破。比特币中使用的就是RIPEMD-160。

SHA-3

  • SHA-3(Secure Hash Algorithm-3)是一种作为新标准发布的单向散列函数算法,用来替代在理论上已被找出攻击方法的SHA-1算法。
  • SHA-3的标准是Keccak算法。

Keccak

  • Keccak是一种被选定为SHA-3标准的单向散列函数算法。
  • Keccak可以生成任意长度的散列值,但为了配合SHA-2的散列值长度,SHA-3标准中共规定了SHA3-224、SHA3-256、SHA3-384、SHA3-512这4种版本。

消息认证码

  • 消息认证码(Message Authentication Code)是一种确认完整性并进行认证的技术,简称为MAC。
  • 消息认证指的是“消息来自正确的发送者”这一性质。
  • 消息认证码的输入包括任意长度的消息和一个发送者与接受者之间共享的密钥,它可以输出固定长度的数据,这个数据成为MAC值。
  • 要计算MAC必须持有共享密钥,没有共享密钥的人就无法计算MAC值,消息认证码正是利用这一性质来完成认证的。此外,和单向散列函数的散列值一样,哪怕消息中发生1比特的变化,MAC值也会产生变化,消息认证码正是利用这一性质来确认完整性的。
  • 消息认证码可以说是一种与密钥相关联的单向散列函数。
  • 消息认证码可以使用单向散列函数和对称密码等技术来实现。
  • 消息认证与单向散列的对比
  • 消息认证使用步骤

HMAC

  • HMAC是一种使用单向散列函数来构造消息认证码的方法,其中HMAC的H就是Hash的意思。
  • 消息认证码也不能解决所有的问题,例如“对第三方证明”,和“防止否认”,这两个问题就无法通过消息认证码来解决。

数字签名

  • 消息认证码之所以无法防止否认,是因为消息认证码需要在发送者和接收者两者之间共享一个密钥。
  • 数字签名是一种能够对第三方进行消息认证,并能够防止通信对象作出否认的认证技术。
  • 数字签名中也同样会使用公钥和私钥组成的密钥对,不过这两个密钥的用法和公钥密码是相反的,即用私钥加密相当于生成签名,而用公钥解密则相当于验证签名。

证书

  • 公钥证书(Public-Key Certificate,PKC)其实和驾照很相似,里面记有姓名、组织、邮箱、地址等个人信息,以及属于此人的公钥,并由认证机构(Certification Authority,CA)施加数字签名。只要看到公钥证书,我们就可以知道认证机构认定该公钥的确属于此人。公钥证书也简称为证书。
  • 认证机构就是能够认定“公钥确实属于此人”并能够生成数字签名的个人或者组织。

典型密码

RSA密码

  • 主要概念
    • 欧拉函数
    • 欧拉定理
    • 费马小定理
  • RSA密码诞生

资料

结束


支付宝打赏 微信打赏

~ 海内存知已,天涯若比邻 ~

Share

Related Posts

标题:强化学习-Reinforcement Learning

摘要:AI=DL+RL,那么RL强化学习是什么,包含哪些内容,有哪些典型应用?

标题:联邦学习-Federated Learning

摘要:如何保护用户隐私的同时也能充分利用各类数据?

Comments

--disqus--

    Content
    My Moment ( 微信公众号 )
    欢迎关注鹤啸九天