密码学笔记.doc_第1页
密码学笔记.doc_第2页
密码学笔记.doc_第3页
密码学笔记.doc_第4页
密码学笔记.doc_第5页
免费预览已结束,剩余17页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

灰灰的密码学笔记目录: 密码常识 字母表顺序-数字 进制转换密码 Mod算法 倒序 间隔 字母频率 凯撒密码(Caesar Shifts, Simple Shift) 凯撒移位(中文版) 栅栏密码(The Rail-Fence Cipher) 维吉尼亚密码(Vigenre Cipher) Polybius密码(Polybius Cipher) ADFGX/ADFGVX密码(ADFGX/ADFGVX Cipher) ADFGX ADFGVX 乘法密码(Multiplication Cipher) 仿射密码(Affine Shift) 希尔密码(Hill Cipher) 加密 解密 Playfair密码(Playfair Cipher) 摩斯电码 置换密码(Transposition Cipher) 替代密码(Monoalphabetic Substitution) 字母表数字 字母表代码 反字母表 随机乱序字母 棋盘密码 键盘密码 键盘移位 软键盘密码 数字小键盘密码 手机键盘密码 数字谐音密码 数字记忆编码 百度/Google/网页字符 百度字符(GB2312) Google字符(URI) 网页编码(Unicode) Alt+数字小键盘 MD5【密码常识】 字母表顺序-数字 加密的时候,经常要把AZ这26个字母转换成数字,最常见的一种方法就是取字母表中的数字序号。A代表1,B代表2,C代表3. 字母 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 数字 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 进制转换密码 例如二进制:1110 10101 1101 10 101 10010 1111 1110 101 转为十进制:14 21 13 2 5 18 15 14 5 对应字母表:number Mod算法 我们可以对字母序号进行数学运算,然后把所得的结果作为密文。当运算结果大于26或小于1的时候,我们希望把这个数值转为126的范围,那么取这个数除以26的余数即可。 Mod就是求余数的运算符,有时也用“%”表示。例如 29 Mod 26 = 3,或写成 29 % 26 = 3,意思是29除以26的余数是3。 倒序 加密时为经常要对字符进行倒序处理。如果让你按abcdef.的顺序背出字母表的每个字母会很容易,但是如果是zyxwvu.的顺序那就很难背出来了。一个很熟悉的单词,如果按相反的顺序拼写,可能就会感到很陌生。 例如“love”字母倒过来拼就是“evol”。 具体加密时倒序有很多种方案,需要灵活运用。例如: 每个单词的倒序:siht si a tset - this is a test 整句的倒序:tset a si siht - this is a test 数字的倒序:02 50 91 02 - 20 05 19 20(test) 间隔 单词之间的间隔一般使用空格。在加密时常常要去掉空格,但有时某些字母或数字来替代空格也不失为一种好的加密方案。错误空格位置也会起到很强的误导作用。 例如:t hi sis at est - this is a test 字母频率 频率分析法可以有效的破解单字母替换密码。 关于词频问题的密码,我在这里提供英文字母的出现频率给大家,其中数字全部是出现的百分比: a 8.2 b 1.5 c 2.8 d 4.3 e 12.7 f 2.2 g 2.0 h 6.1 i 7.0 j 0.2 k 0.8 l 4.0 m 2.4 n 6.7 o 7.5 p 1.9 q 0.1 r 6.0 s 6.3 t 9.1 u 2.8 v 1.0 w 2.4 x 0.2 y 2.0 z 0.1 词频法其实就是计算各个字母在文章中的出现频率,然后大概猜测出明码表,最后验证自己的推算是否正确。这种方法由于要统计字母出现频率,需要花费时间较长。参考跳舞的小人和金甲虫。 【凯撒密码(Caesar Shifts, Simple Shift)】 也称凯撒移位,是最简单的加密方法之一,相传是古罗马恺撒大帝用来保护重要军情的加密系统,它是一种替代密码。 加密公式:密文 = (明文 + 位移数) Mod 26 解密公式:明文 = (密文 - 位移数) Mod 26 以数字城堡中的一组密码为例: HL FKZC VD LDS 只需把每个字母都按字母表中的顺序依次后移一个字母即可A变成B,B就成了C,依此类推。因此明文为: IM GLAD WE MET 英文字母的移位以移25位为一个循环,移26位等于没有移位。所以可以用穷举法列出所有可能的组合。 例如:phhw ph diwhu wkh wrjd sduwb 利用电脑可以方便地列出所有组合,然后从中选出有意义的话: qiix qi ejxiv xli xske tevxc rjjy rj fkyjw ymj ytlf ufwyd skkz sk glzkx znk zumg vgxze tlla tl hmaly aol avnh whyaf ummb um inbmz bpm bwoi xizbg vnnc vn jocna cqn cxpj yjach wood wo kpdob dro dyqk zkbdi xppe xp lqepc esp ezrl alcej yqqf yq mrfqd ftq fasm bmdfk zrrg zr nsgre gur gbtn cnegl assh as othsf hvs hcuo dofhm btti bt puitg iwt idvp epgin cuuj cu qvjuh jxu jewq fqhjo dvvk dv rwkvi kyv kfxr grikp ewwl ew sxlwj lzw lgys hsjlq fxxm fx tymxk max mhzt itkmr gyyn gy uznyl nby niau julns hzzo hz vaozm ocz ojbv kvmot iaap ia wbpan pda pkcw lwnpu jbbq jb xcqbo qeb qldx mxoqv kccr kc ydrcp rfc rmey nyprw ldds ld zesdq sgd snfz ozqsx meet me after the toga party ba lx lo on 同行取右边:he-ec 同列取下边:dm-mt 其他取交叉:kt-mq od-tr 例如:ballon - ba lx lo on - db sp gs ug 【摩斯电码】 摩斯电码(摩尔斯电码)是一种发报用的信号代码,是一种替代密码,用点(Dot)和划(Dash)的组合来表示各个英文字母或标点。 国际标准摩斯电码表 1 *- A *- N -* . *-*-*- 2 *- B -* O - , -*- 3 *- C -*-* P *-* : -* 4 *- D -* Q -*- *-* 5 * E * R *-* ? *-* 6 -* F *-* S * - -*- 7 -* G -* T - () -*-*- 8 -* H * U *- *-*-* 9 -* I * V *- -*- 0 - J *- W *- 分数线 -*-* K -*- X -*- L *-* Y -*- 终了r *-*- M - Z -* 始信n -*-*- 例:Hello (斜线代表字母之间的间隔) */*/*-*/*-*/-/ 【置换密码(Transposition Cipher)】 也称易位密码。 - 【替代密码(Monoalphabetic Substitution)】 也称单表替换密码。 字母表数字 用1-26这些数字分别表示A-Z的字母。 字母 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 数字 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 字母表代码 同字母表数字,只是把10以下的数字添0补位。 字母 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 数字 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 反字母表 就是丹布朗在达芬奇密码一书中提到的埃特巴什码(Atbash Cipher)。它的原理是取一个字母,指出它位于字母表正数第几位,再把它替换为从字母表倒数同样的位数后得到的字母。如:E被替换为V,N被替换为M等。 明码表 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 密码表 Z Y X W V U T S R Q P O N M L K J I H G F E D C B A 明文:sophia 密文:hlksrz 随机乱序字母 即单字母替换密码。重排密码表二十六个字母的顺序,密码表会增加到四千亿亿亿多种,能有效的防止用筛选的方法检验所有的密码表。这种密码持续使用几个世纪,直到阿拉伯人发明了频率分析法。 明码表 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 密码表 Q W E R T Y U I O P A S D F G H J K L Z X C V B N M 明文:forest 密文:gbmrst 棋盘密码 即Polybius密码。 键盘密码 加密的原理同棋盘密码,只是利用了键盘作为方阵。 键盘的字母分布: !#$%&*()_+| 1234567890-= QWERTYUIOP qwertyuiop ASDFGHJKL: asdfghjkl; ZXCVBNM? zxcvbnm,./ 密文:72 81 12 63 01 12 63 明文:jianpan 低下头看看键盘就知道了,密文就是键盘上的26个字母的坐标,72即第7列第2行,第7列正好是数字键7的位置,往下2个就是字母J。 键盘移位 密文:kosmsm 明文:jianpan 就是键盘上的字母往右一个。例如j键的右面是k,i键的右面是o,依此类推。 软键盘密码 密文1: 密文2: 密文3: 密文4: 明文:zhe shi li yong ruan jian pan jia mi de(这是利用软键盘加密的) 用智能ABC或微软拼音输入法,把小键盘打开,选择日本平假名字符,输入“zhe shi”就会出现“ ”,如果切换到俄文字符就会出现“ ” 数字小键盘密码 数字小键盘的字母分布: 7 8 9 4 5 6 1 2 3 密文:852 74123 741236987 74269 78974123456 7412369 明文:I L O V E U 对照小键盘,依次打这些字母,看组成的形状就行了。 关于Alt+小键盘数字的加密方法,参看:百度/Google/网页字符。 手机键盘密码 -图- 根据手机键盘上的数字和对应的字母进行加密。 密文:42 21 71 71 93 明文:HAPPY “42”:4键对应的是GHI,GHI第2个就是H;“21”:2键对应的是ABC,ABC第1个就是A。 加密时往往只出现数字键,而不给出具体的字母位置,这时解密时就要列举所有可能的组合,从中选出有意义的单词来。 例如密文:42779,这时就要从 GHI ABC PQRS PQRS WXYZ 中提出有意义的字符:HAPPY 另一种方法是根据形状加密的,和数字小键盘密码相同,按照密码里的数字比划一下就划出来了。 比如密文173946,对应的明文是H,17是左边一竖,39是右边一竖,46是中间一横。【百度/Google/网页字符】 下面解释一下在百度、Google搜索中文的关键词时,地址栏上出现的奇怪字符。 百度字符(GB2312) 例如在百度搜索“你好”两个字,会转到一个地址为 /s?wd=%C4%E3%BA%C3 的网页。 密文(GB码16进制):%C4%E3%BA%C3 密文(GB码十进制):50403 47811 明文:你好 百度用的是GB2312的中文编码,是16进制的。GB2312是标准的简体中文编码。“你”字的GB码为C4E3,“好”字的GB码为BAC3。“你好”转换成十进制为50403和47811。 Google字符(URI) 例如在Google搜索“你好”两个字,会转到一个地址为 /search?q=%E4%BD%A0%E5%A5%BD 的网页。 密文(URI):%E4%BD%A0%E5%A5%BD 明文:你好 URI全称Uniform Resource Identifier(通用资源标识符)。Internet可用的每种资源 - HTML文档、图像、视频片段、程序等 - 由一个通过URI进行定位。 网页编码(Unicode) 论坛里常玩的一个把戏,就是让你回帖时写一堆像天书一样的奇怪字符,而回帖之后就能看到相应的文字。 密文(Unicode16进制):楼主是个天才 密文(Unicode10进制):楼主是个天才 明文:楼主是个天才 这里使用的是Unicode编码(十进制),Unicode是一种全世界范围的文字编码,网页都支持这种编码。 Alt+数字小键盘 按住Alt键,在任意文本框中,用键盘右边的数字小键盘输入55021,然后松开Alt键,这时你看到了什么? 用同样的方法分别输入“你好”两个字的GB代码(十进制)50403、47811,这时你将在文本框中看到这两个字。 注意在qq的对话框中,要使用Unicode代码(十进制)20320、22909。 【MD5】 简介 MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。 MD5是一种散列(Hash)算法,散列算法的用途不是对明文加密,让别人看不懂,而是通过对信息摘要的比对,防止对原文的篡改。通常对散列算法而言,所谓的“破解”,就是找碰撞。 MD5是把一个任意长度的字节串加密成一个固定长度的大整数(通常是16位或32位),加密的过程中要筛选过滤掉一些原文的数据信息,因此想通过对加密的结果进行逆运算来得出原文是不可能的。 关于MD5的应用,举个具体的例子吧。例如你在一个论坛注册一个账号,密码设为“qiuyu21”。此密码经过MD5运算后,变成“287F1E255D930496EE01037339CD978D”,当你点“提交”按钮提交时,服务器的数据库中不记录你的真正密码“qiuyu21”,而是记录那个MD5的运算结果。然后,你在此论坛登录,登录时你用的密码是“qiuyu21”,电脑再次进行MD5运算,把“qiuyu21”转为“287F1E255D930496EE01037339CD978D”,然后传送到服务器那边。这时服务器就把你传过来的MD5运算结果与数据库中你注册时的MD5运算结果比较,如果相同则登录成功。 也就是说,服务器只是把MD5运算结果作比较。你也许会问,服务器为什么不用直接对你的密码“qiuyu21”进行校验呢?因为如果服务器的数据库里存的是你的真实密码,那么黑客只要破解了服务器的数据库,那么他也就得到了所有人的密码,他可以用里面的任意密码进行登录。但是如果数据库里面的密码都是MD5格式的,那么即使黑客得到了“287F1E255D930496EE01037339CD978D”这一串数字,他也不能以此作为密码来登录。 现在再来谈谈MD5的破解。假设你是攻击者,已经得到了“287F1E255D930496EE01037339CD978D”这一串数字,那么你怎么能得出我的密码是“qiuyu21”呢?因为MD5算法是不可逆的,你只能用暴力法(穷举法)来破解,就是列举所有可能的字母和数字的排列组合,然后一一进行MD5运算来验证运算结果是否为“287F1E255D930496EE01037339CD978D”,“qiuyu21”这个密码是7位英文字符和数字混合,这样的排列组合的数量是个天文数字,如果一一列举,那么在你有生之年是看不到了。所以只有使用黑客字典才是一种有效可行的方法,黑客字典可以根据一些规则自动生成。例如“qiuyu21”这个密码,就是一种常见的组合,规则是:拼音+拼音+数字,拼音总共大约400个,数字以2位数100个来算,这种规则总共约400*400*100=16,000,000种可能,使用优化的算法,估计用1秒就能破解吧。就算考虑到字母开头大写或全部大写的习惯,也只会花大约10几秒时间。如果是破解你熟悉的某个人的密码,那么你可以根据你对他的了解来缩小词典的范围,以便更快速的破解。这种破解方法在很大程度上依赖于你的运气。 最后谈谈MD5的碰撞。根据密码学的定义,如果内容不同的明文,通过散列算法得出的结果(密码学称为信息摘要)相同,就称为发生了“碰撞”。因为MD5值可以由任意长度的字符计算出来,所以可以把一篇文章或者一个软件的所有字节进行MD5运算得出一个数值,如果这篇文章或软件的数据改动了,那么再计算出的MD5值也会产生变化,这种方法常常用作数字签名校验。因为明文的长度可以大于MD5值的长度,所以可能会有多个明文具有相同的MD5值,如果你找到了两个相同MD5值的明文,那么你就是找到了MD5的“碰撞”。 散列算法的碰撞分为两种,强无碰撞和弱无碰撞。还是以前面那个密码为例:假如你已知“287F1E255D930496EE01037339CD978D”这个MD5值,然后找出了一个单词碰巧也能计算出和“qiuyu21”相同的MD5值,那么你就找到了MD5的“弱无碰撞”,其实这就意味着你已经破解了MD5。如果不给你指定的MD5值,让你随便去找任意两个相同MD5值的明文,即找“强无碰撞”,显然要相对容易些了,但对于好的散列算法来说,做到这一点也很不容易了。 值得一提的是,强无碰撞已经被中国的王小云老师给搞定了,她提出的算法可以在短时间内找到碰撞,在世界上引起了轰动,现在的电脑大约一两个小时就可以找到一对碰撞。遗憾的是,找到强无碰撞在实际破解中没有什么真正的用途,所以现在MD5仍然是很安全的。 MD5算法描述 对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。 在MD5算法中,首先需要对信息进行填充,使其字节长度对512求余的结果等于448。因此,信息的字节长度(Bits Length)将被扩展至N*512+448,即N*64+56个字节(Bytes),N为一个正整数。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。 MD5中有四个32位被称作链接变量(Chaining Variable)的整数参数,他们分别为:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。 当设置好这四个链接变量后,就开始进入算法的四轮循环运算。循环的次数是信息中512位信息分组的数目。 将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。 主循环有四轮(MD4只有三轮),每轮循环都很相似。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数。再将所得结果向右环移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。以一下是每次操作中用到的四个非线性函数(每轮一个)。 F(X,Y,Z) =(X&Y)|(X)&Z) G(X,Y,Z) =(X&Z)|(Y&(Z) H(X,Y,Z) =XYZ I(X,Y,Z)=Y(X|(Z) (&是与,|是或,是非,是异或) 这四个函数的说明:如果X、Y和Z的对应位是独立和均匀的,那么结果的每一位也应是独立和均匀的。F是一个逐位运算的函数。即,如果X,那么Y,否则Z。函数H是逐位奇偶操作符。 假设Mj表示消息的第j个子分组(从0到15): FF(a,b,c,d,Mj,s,ti) 表示 a=b+(a+(F(b,c,d)+Mj+ti) GG(a,b,c,d,Mj,s,ti) 表示 a=b+(a+(G(b,c,d)+Mj+ti) HH(a,b,c,d,Mj,s,ti) 表示 a=b+(a+(H(b,c,d)+Mj+ti) II(a,b,c,d,Mj,s,ti) 表示 a=b+(a+(I(b,c,d)+Mj+ti) 这四轮(64步)是: 第一轮 FF(a,b,c,d,M0,7,0xd76aa478) FF(d,a,b,c,M1,12,0xe8c7b756) FF(c,d,a,b,M2,17,0x242070db) FF(b,c,d,a,M3,22,0xc1bdceee) FF(a,b,c,d,M4,7,0xf57c0faf) FF(d,a,b,c,M5,12,0x4787c62a) FF(c,d,a,b,M6,17,0xa8304613) FF(b,c,d,a,M7,22,0xfd469501) FF(a,b,c,d,M8,7,0x698098d8) FF(d,a,b,c,M9

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论