密码学博大精深,作为程序员,先把计算机系统相关的学好再说。
在线测试网站:http://tool.chacuo.net/cryptdes

1 概念

  • 密钥:分为加密密钥和解密密钥。
  • 明文:没有进行加密,能够直接代表原文含义的信息。
  • 密文:经过加密处理处理之后,隐藏原文含义的信息。
  • 加密:将明文转换成密文的实施过程。
  • 解密:将密文转换成明文的实施过程。
  • 密码算法:密码系统采用的加密方法和解密方法,随着基于数学密码技术的发展,加密方法一般称为加密算法,解密方法一般称为解密算法。

  • 分组密码(block cipher):用明文的一个区块和密钥,输出相同大小的密文区块。由于待加密数据通常比单一分组长,因此有各种方式将连续的区块拼接在一起。分组密码代表有DES,AES。

  • 流密码(stream cipher):相对于分组加密,把密钥与明文依位元或字符结合,有点类似一次一密密码本(one-time pad)。输出的串流根据加密时的内部状态而定。在一些流密码上由密钥控制状态的变化。流密码代表有RC4。

2 分类

1. 对称加密与非对称加密

对称加密与非对称加密的区别在于加密密钥与解密密钥是不是同一个密钥。

  • 对称加密:DES,3DES,AES
    对称加密是最快速、最简单的一种加密方式,加密与解密用的是同一个密钥。密钥一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。
    对称加密的密钥如果需要通过互联网传输,一般通过非对称加密传输来保证安全性。
  • 非对称加密:RSA,ECC
    非对称加密使用一对密钥,公钥和私钥。私钥必须保管好,不可泄露。而公钥则可以随意下载。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。私钥不需要传输,安全性高,但速度较慢。
  • 对称加密和非对称加密对比
    对称加密速度快,但因为加解密需要同一个密钥,所以密钥需要传输,窃听风险和密钥泄露风险不可避免。非对称加密速度慢,但私钥掌握在服务提供方手中,更安全。

2. 序列密码与分组密码

序列密码与分组密码的区别在于加密时每次处理的字符串是否分组。

  • 序列密码:RC4,SEAL
    也称为流密码(Stream Cipher),它是对称密码算法的一种,加解密时一次处理明文中的一位或一个字节。
    “一次一密”的密码方案是序列密码的雏形。如果序列密码所使用的是真正随机方式的、与消息流长度相同的密钥流,则此时的序列密码就是一次一密的密码体制。若能以一种方式产生一随机序列(密钥流),这一序列由密钥所确定,则利用这样的序列就可以进行加密,即将密钥、明文表示成连续的符号或二进制,对应地进行加密。
    在序列密码中,密钥流由密钥流发生器f产生:zi=f(k,si),这里的si是加密器中存储器(记忆元件)在i时刻的状态。根据加密器中的记忆元件si的存贮状态是否依赖于明文字符,序列密码可进一步分成同步和自同步两种。如果si独立于明文字符则称为同步流密码,否则称为自同步流密码。
  • 分组密码:DES,AES
    将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。
    分组密码将定长的明文块转换成等长的密文,这一过程在密钥的控制之下。使用逆向变换和同一密钥来实现解密。对于当前的许多分组密码,分组大小是 64 位,但这很可能会增加。
  • 序列密码与分组密码的对比
    • 分组密码处理的单位是固定长度的一组明文,而序列密码每次处理一位或一个字节。
    • 序列密码是一个随时间变化的加密变换,具有转换速度快、低错误传播的优点,硬件实现电路更简单;其缺点是:低扩散(意味着混乱不够)、插入及修改的不敏感性。
    • 分组密码使用的是一个不随时间变化的固定变换,具有扩散性好、插入敏感等优点;其缺点是:加解密处理速度慢、存在错误传播。

3 常用类型

1 加密散列函数(信息摘要算法)

严格来讲,信息摘要算法并不是加密算法。
散列,也叫哈希。任意长度的输入通过散列算法可以变换成固定长度的输出,该输出就是散列值。散列函数就是将任意长度的消息压缩到某一固定长度的消息摘要的函数。
1. MD5
压缩为32位十六进制的数(128bit)。
MD5的算法在1995年,就披露存在理论上的脆弱性。
MD5(Message-Digest Algorithm 5信息-摘要算法5)算法具有以下特点:
- 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
- 容易计算:从原数据计算出MD5值很容易。
- 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
- 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
MD5算法用途:
- 文件一致性校验:对一段信息产生信息摘要,以防止被篡改。
- 密码加密:需要密码登录的系统,将密码用MD5处理后保存。用户登录时比较用户输入的密码的MD5值是否与系统保存的一致即可。
2. SHA-1
压缩为40位十六进制的数(160bit)。

目前SHA-1的安全性:

  • 2005年,我国密码学专家王小云教授,将破解SHA-1 的时间从2^69步到2^63步。
  • 2013年,一个叫Stevens的小伙将破解计算量降低到 2^61步。
  • 2016年,他再一次将计算量降低到2^57.5 步。用这种方法,100个GPU大约需要计算一年就能破解,大概得花个几十万美元。

SHA(Secure Hash Algorithm,译作安全散列算法)家族成员之一。
SHA-1在许多安全协议中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec。但SHA-1的安全性如今被密码学家严重质疑。用于HTTPS证书的哈希算法,最好用SHA-2。
3. SHA-2
SHA-224、SHA-256(摘要长度256位)、SHA-384、SHA-512(摘要长度512位)并称为SHA-2。
SHA-256 算法输入报文的最大长度不超过2^64 bit,输入按512bit 分组进行处理,产生的输出是一个256bit 的报文摘要。

成员名称 为避免混淆使用的非正式名称
SHA SHA-0
SHA-1 SHA-1
SHA-224
SHA-256
SHA-384
SHA-512

SHA-2

2 公/私钥加密算法(非对称性密钥算法)

所谓非对称,指该算法需要一对密钥,使用其中一个加密,用另一个才能解密。
公钥密码体制根据其所依据的难题一般分为三类:大整数分解问题类、离散对数问题类、椭圆曲线类。有时也把椭圆曲线类归为离散对数类。

1. RSA因数分解

RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,采用传统加密方法与RSA相结合的方式,即信息采用DES加密,然后使用RSA密钥加密DES对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要。

RSA原理:
RSA算法涉及三个参数,n、e1、e2。
其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。
e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2×e1)≡1(mod(p-1)×(q-1))。
(n,e1),(n,e2)就是密钥对。其中(n,e1)为公钥,(n,e2)为私钥。
RSA加解密的算法完全相同,设A为明文,B为密文,则:A≡B^e2( mod n);B≡A^e1 (mod n);(公钥加密体制中,一般用公钥加密,私钥解密)
e1和e2可以互换使用,即:
A≡B^e1 (mod n);B≡A^e2( mod n);
RSA缺点:
1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。
2)安全性,RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价,而且密码学界多数人士倾向于因子分解不是NP问题。现今,人们已能分解140多个十进制位的大素数,这就要求使用更长的密钥,速度更慢;另外,人们正在积极寻找攻击RSA的方法,如选择密文攻击,一般攻击者是将某一信息作一下伪装(Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构:
(XM)d = Xd *Md mod n
前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征–每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way Hash Function对文档作HASH处理,或同时使用不同的签名算法。除了利用公共模数,人们还尝试一些利用解密指数或φ(n)等等攻击.
3)速度太慢,由于RSA 的分组长度太大,为保证安全性,n 至少也要 600 bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。SET(Secure Electronic Transaction)协议中要求CA采用2048比特长的密钥,其他实体使用1024比特的密钥。为了速度问题,人们广泛使用单,公钥密码结合使用的方法,优缺点互补:单钥密码加密速度快,人们用它来加密较长的文件,然后用RSA来给文件密钥加密,极好的解决了单钥密码的密钥分发问题。

攻击进度

  • 1999年,RSA-155(512bits)被成功分解,花了五个月时间(约8000 MIPS 年)和224 CPU hours 在一台有3.2G中央内存的Cray C916计算机上完成。
  • 2002年,RSA-158也被成功因数分解。
  • 2009年12月12日,编号为 RSA-768 (768bits,232 digits)数也被成功分解。

2. El Gamal (离散对数)

基于1985年提出的公钥密码体制和椭圆曲线加密体系,安全性依赖于计算有限域上离散对数这一难题。在加密过程中,生成的密文长度是明文的两倍,且每次加密后都会在密文中生成一个随机数K,在密码中主要应用离散对数问题的几个性质:求解离散对数(可能)是困难的,而其逆运算指数运算可以应用平方-乘的方法有效地计算。也就是说,在适当的群G中,指数函数是单向函数。

3. ECC(Elliptic Curves Cryptography椭圆曲线密码算法) (离散对数变种)

椭圆曲线密码体制是目前已知的公钥体制中,对每比特所提供加密强度最高的一种体制。ECC使用234位的密钥所获得的安全强度比RSA使用2048位的密钥还高出许多。
ECC 与 RSA 相比,有以下的优点:
(1)相同密钥长度下,安全性能更高,如160位ECC已经与1024位RSA、DSA有相同的安全强度。
(2)计算量小,处理速度快,在私钥的处理速度上(解密和签名),ECC远 比RSA、DSA快得多。
(3)存储空间占用小 ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多, 所以占用的存储空间小得多。
(4)带宽要求低使得ECC具有广泛得应用前景。

3 公/私钥签名算法

数字签名,就是只有信息发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息发送者发送信息真实性的一个有效证明。
公钥用于加密,它是向所有人公开的;私钥用于解密,只有密文的接收者持有。

1. DSA(Digital Signature Algorithm)数字签名算法

DSA 一般用于数字签名和认证。DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接受者收到消息后使用发送者的公钥来验证签名的真实性。

2. RSA签名(同上)

RSA 与 DSA 都是非对称加密算法。其中RSA的安全性是基于极其困难的大整数的分解(两个素数的乘积);DSA 的安全性是基于整数有限域离散对数难题。基本上可以认为相同密钥长度的 RSA 算法与 DSA 算法安全性相当。

3. 区别和注意

DSA和RSA不同之处在于DSA只是一种算法,不能用作加密和解密,也不能进行密钥交换,只用于签名,比RSA要快.
由于信息经过加密或者签名后,都变成不可读模式,为了方便终端查看和传输使用(url提交数据,需要作urlencode操作),可以使用base64进行编码 。

4 对称密钥算法

所谓对称性加密,加密和解密密钥相同。对称性加密一般会按照固定长度,把待加密字符串分成块。不足一整块则填充特殊字符。
AES安全性高于DES,并且AES将取代DES,推荐用AES。

1. DES

DES(Data Encryption Standard,数据加密标准)。
密钥长度是64bit(实际用到了56位,第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1),超过位数密钥被忽略。往往跨语言做DES加密解密,经常会出现问题。往往是填充方式不对、或者编码不一致、或者选择加密解密模式(ECB,CBC,CTR,OFB,CFB,NCFB,NOFB)没有对应上造成。常见的填充模式有: ‘pkcs5’,’pkcs7’,’iso10126’,’ansix923’,’zero’ 类型。
DES算法的入口参数有三个:Key、Data、Mode。其中Key为7个字节共56位,是DES算法的工作密钥。Data为8个字节64位,是要被加密或被解密的数据。Mode为DES的工作方式,有两种:加密或解密。
DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位。

2. 3DES

DES(即Triple DES)是DES向AES过渡的加密算法,它使用3条56位的密钥对数据进行三次加密。是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。比起最初的DES,3DES更为安全。
加密时采用加密-解密-加密,而不是加密-加密-加密的形式,这样有效的实现了与现有DES系统的向后兼容问题。因为当K1=K2时,三重DES的效果就和原来的DES一样,有助于逐渐推广三重DES。

3. AES

AES(Advanced Encryption Standard,即高级加密标准)。
AES的分组长度固定为128 比特,密钥长度则可以是128,192或256比特。

4 密码分析

就是破解密码。

1. 经典密码分析

频率分析是破解经典密码的一个基本方法。在自然语言里,字母表里的有些字母比其它的字母出现得更频繁。

2. 现代密码分析

拦截攻击,窃听,边信道攻击,以及用量子计算机来代替传统计算机做密码分析。
对分组密码安全性的讨论主要包括差分密码分析、线性密码分析和强力攻击等。从理论上讲,差分密码分析和线性密码分析是目前攻击分组密码的最有效的方法,而从实际上说,强力攻击是攻击分组密码最可靠的方法。

密码1-分类,常用类型,密码分析相关推荐

  1. 【C#串口编程计划】通信协议解析 -- byte[]与常用类型的转换

    刚刚完成一个串口通讯的系统.目前在把串口通信的代码整合到团队的类库中(把串口通信与网口Soket通讯整合起来,后面只需要配置参数,就可实现网络与串口通讯的转换),故C#串口编程计划的最后一篇图文&qu ...

  2. Scala声明变量、常用类型、条件表达式、块表达式、循环

    一. Scala基础 1. 声明变量 package cn.toto.scala/*** Created by toto on 2017/6/27.*/ object VariableDemo {de ...

  3. ashx中Response.ContentType的常用类型

    ashx中Response.ContentType的常用类型: text/plain text/html text/xml application/json image/GIF application ...

  4. soapui返回值类型都有哪些_滚珠丝杠的常用类型都有哪些?

    滚珠丝杠的常用类型都有哪些?高精度.定位准确是滚珠丝杠的主要表现特征,但是机械生产设备上面能够做到这两点的话,基本上也会要求该传动元件的型号比较齐全.而这种传动元件就具有种类繁多的特点,生产的型号较为 ...

  5. DELPHI-Delphi常用类型及定义单元

    DELPHI-Delphi常用类型及定义单元 Type Unit Date SysUtils DeleteFile SysUtils or Windows (different versions) D ...

  6. ElasticSearch03_Mapping字段映射、常用类型、数据迁移、ik分词器、自定义分词器

    文章目录 ①. Mapping字段映射概述 ②. 常用类型如下 - text.keyword ③. 映射中对时间类型详解 ④. ES的keyword的属性ignore_above ⑤. 映射的查看.创 ...

  7. 商城项目18_esMapping字段映射、常用类型、数据迁移、ik分词器、自定义分词器

    文章目录 ①. Mapping字段映射概述 ②. 常用类型如下 - text.keyword ③. 映射中对时间类型详解 ④. ES的keyword的属性ignore_above ⑤. 映射的查看.创 ...

  8. 【Python深度学习】基于Tensorflow2.0构建CNN模型尝试分类音乐类型(二)

    前情提要 基于上文所说 基于Tensorflow2.0构建CNN模型尝试分类音乐类型(一) 我用tf2.0和Python3.7复现了一个基于CNN做音乐分类器.用余弦相似度评估距离的一个音乐推荐模型. ...

  9. 手游服务器ip 修改密码,手机挂常用ip改QQ密码技巧

    手机挂改密码: 具体步骤: [1]手机(必须是智能机)上要先安装两个软件:手机QQ(08.09.10.11版本都可以)和opera mobile浏览器8 (安装方法用手机浏览器登陆m.opera.co ...

  10. Scala——(常用类型与字面量,Scala类层次结构,值与变量自动类型推断,操作符,块表达式和赋值语句,输出和输出,字符串插值器,对象相等性)

    文章目录 常用类型与字面量 Scala类层次结构 值与变量&自动类型推断 操作符 块表达式和赋值语句 输出和输出 字符串插值器 对象相等性 常用类型与字面量 Scala和Java一样,有8种数 ...

最新文章

  1. 根据输入的数字显示日期(新手)
  2. 画动态分析图的个人小技巧
  3. wkWebView 的一些问题
  4. C++ Primer 7.33 练习编写成员函数
  5. POJ3070 矩阵快速幂模板
  6. 第14章:傅里叶变换
  7. python去重计数_用Python实现透视表的value_sum和countdistinct功能
  8. atititt.java定时任务框架选型Spring Quartz 注解总结
  9. 从零开始使用webpack 4, Babel 7创建一个React项目
  10. 修改计算机ip地址cmd,有谁能告诉我怎么用cmd指令修改自己电脑的IP地址
  11. java dojo,针对 Java 开发人员的 Dojo 概念
  12. 每日新闻丨软件业务收入64616亿元;工信部发话广电5G正式启动
  13. 419. 甲板上的战舰
  14. 全球及中国人工智能投诉管理行业发展趋势及投资策略分析报告2022-2028年
  15. php xmp,xmp可以一直开着吗
  16. 无法启动此程序,因为计算机中丢失 api-ms-win-crt-stdio-l1-1-0.dll
  17. 【优化求解】基于matlab禁忌搜索算法求解函数极值问题【含Matlab源码 1204期】
  18. 十二个“一”的文艺创作拓展:关于星座
  19. 传奇人物穿戴物品位置编号
  20. Flag Engine(动画系统)学习笔记(六)——动画片段

热门文章

  1. c语言台阶,关于C语言跳台阶问题的解决方法
  2. 应用树莓派GPIO完成智能红绿灯系统
  3. 一文看懂人工智能产业链!
  4. 使用Sbert预训练的TTS模型《Expressive Text-to-Speech using Style Tag》
  5. Linux Mint(version19)
  6. 任意App/H5的web页面直接打开微信小程序的实现
  7. 龙门浩职高计算机学校,重庆市龙门浩职业中学校|龙门浩职高是公办还是民办院校/文凭怎么样/是什么性质...
  8. 蓝桥杯科学素养题(2020年12月-2021年12月)
  9. CF1090H Linearization
  10. Win11后续更新计划:微软将逐步取消传统的控制面板功能