Java 密码学相关知识
密码的发展
密码的起源:
密码的起源非常早,早期的符号密码像宗教符号、岩壁画,至今无人破解的”费托斯圆盘“和无人读懂的”伏尼契手稿“
古代隐写术:
国内的:封蜡技术、隐形墨水、吞服信条...
国外的:卡登格子隐藏法(意大利数学家卡登,两张带孔的卡片+文字混淆)...
生活中的密码:
密码锁、指纹识别、人脸识别、门禁卡...
哑语、盲文、交通图标、汉字...
古典密码
滚筒、凯撒、培根、维吉尼亚、银票
密码学的基石:置换:对明文的部分或全部内容顺序进行位置交换替换:对明文的部分或全部内容进行规则型字符代替交换
滚筒密码
滚筒密码使用置换方法两根相同粗细的多边菱形木棍分别在加密方和解密方,
加密方使用纸条缠绕木棍,横向写入内容,只有相同直径的木棍能还原内容
凯撒密码
单表替换(用一张密码表里的内容,去替换需要加密的内容)采用错位方法:用第4个字母代替第一个字母,也就是偏移3位(偏移位可以依规则而定)优点:加密公式简单、解密容易理解
缺点:容易被”穷举法“破译
培根密码
单表替换,用固定密文代替固定明文
维吉尼亚密码
多表替换(为提高单表替换的破译难度)类似于Excel表格,采用横纵两位的词组作为密钥,词组中每个字母作为索引,来确定采用的替换表(加密后的首个字母是密钥当前对应的字母)优点:使用了相对复杂的密钥,同样的内容使用不同密钥,得到的加密内容也不一样,增加破译难度
缺点:加密内容过长会出现大量的重复密文序列,可能被破译者发现规律而破译出密钥
中国古代银票
纸张、水印、印章、密码、书写
达芬奇密码桶
由5个转轮(每个转轮26个字母)组成了类似一个圆锥形的小桶,内部放入草质信纸和醋
如果暴力破解,信纸将溶于醋中
密码虽然只有5位,却又26的5次方,产生1180多万种组合
机械密码
摩尔斯电报
现代密码
单钥(对称)
可逆,加解密使用同一把密钥(私钥)
双钥(非对称)
不可逆,加解密使用两把密钥(一把私钥、多把公钥)
总结
加密类型 | 加密结果 | 密钥 |
---|---|---|
对称 | 可逆 | 私钥 |
非对称 | 不可逆 | 私钥、公钥 |
对称密码(单钥)
DES、DESede、IDEA、AES
缺点
同一把密钥安全性低,可能被监听或劫持,安全分发密钥成为难题
加密算法
分组:提升效率,对明文划分成相同的长度
填充:解决最后一组字符长度不够问题,补充缺失长度
迭代:对明文多次计算和转换,每一次的计算称为迭代
ECB,CBC等迭代模式:轮密钥加、字节代位、行移位、列混淆、异或、模、模加与或非运算…
非对称密码(双钥)
RSA、ECC
RSA
1976年,密码学家与安全技术专家 **Diffie** 与 **Hellman**,**提出`公钥密码思想`**
1977年,三位数学家**Rivest(MD5)、Shamir、Adleman**,在麻省理工学院工作时设计了**非对称加密算法**Adleman:伯克利分校(顶尖军用人才)博士毕业,计算机病毒教父、DNA计算创始人
RSA设计思想:
大整数分解,将一个正整数分解成几个质数的乘积(既可以加密,也可以签名)
2019年,google对外宣布量子计算机 8小时 破解 2048位 RSA
缺点
加密速度相对于对称加密非常慢,实际慢 20倍 以上
https请求时,SSL证书 使用 RSA校验,后续数据使用 AES加解密
ECC
椭圆曲线密码学(Elliptic curve cryptography)
1985年,Neal Koblitz 和 Victor Miller 分别独立提出
2005年,美国国家安全局宣布采用 ECC 作为美国联邦政府的 加密标准之一
ECC设计思想:
求离散对数,也就是循环群的子群问题
优点
使用更短的密钥来获得相同水平的安全强度,从而使计算量极大减少,大幅缩短了加密时间
ECC 600bit = RSA 21000bit
对称和非对称密码体制的区别
密钥体制 | 优缺点 |
---|---|
单钥 |
1.加密速度快,密钥短 2.密钥分发或者替换困难 3.不能实现身份认证和数字签名 |
双钥 |
1.运算速度慢,密钥长 2.只需保管私钥就行 3.可以进行用户身份认证和数字签名 |
RSA和ECC的加解密、签名、验签
1.RSA可以使用私钥加密/公钥解密,也可以用公钥加密/私钥解密(双向)
2.ECC椭圆曲线只能私钥加密/公钥解密(单向)签名与验签的作用:不可篡改、不可抵赖服务端 -> 使用 私钥,对 数据源/摘要,进行不可逆签名(生成校验值)服务端 -> 将 公钥、数据源、摘要、签名,一起给客户端客户端 -> 使用 公钥+CA证书,对 数据源/摘要、签名,进行验签注:签名使用私钥,签名是针对摘要(防篡改),CA数字证书(防抵赖)
消息摘要算法:Hash、MD5、SHA
消息摘要的由来:
1. 任意长度的消息/文件,压缩到某一固定的长度
2. 具有不可篡改性、不可逆转性
3. 频繁的数据交互,比非对称的“签名、验签”更快
摘要特性:离散性、抗碰撞、不可逆、完整性
注:摘要不是用来加密的,是用来做唯一性校验的
MD5基于MD4,SHA-1基于MD5,SHA-1比MD5长 32位
Hash:
哈希也称为 散列、杂凑函数,具有离散性、不可逆、抗碰撞、防篡改
用途:校验数据的完整性、密码的加密存储、数字签名
MD5:
Message Digest Algorithm 5,消息摘要算法第5版
SHA系列:
Secure Hash Algorithm,安全散列算法
SHA-1、SHA-2(SHA-224、SHA-256、SHA-384、SHA-512)
彩虹表:
收集所有常用密码的数据库,穷举反向查询MD5、SHA-1值等对应的原文
2005年8月,王小云等人破解美国MD5、SHA-1,在SHA-256上改进实现算法国密:SM3
混合摘要算法:
MD5(SHA系列)、HMAC(MD5)、HMAC(SHA系列)MD5混合加密规则:先计算SHA值,再全部转为大写,最后计算MD5值
HMAC混合加密规则:先计算MD5/SHA值,再计算HMAC值
消息认证码(HMAC)
全称:Hash Message Authentication Code, 散列/哈希消息认证码
1996-1997年,散列消息认证码诞生(带密钥的Hash函数,不属于对称密码)
通信双方使用一种验证机制,保证消息数据的完整性
与消息摘要最大的不同,就是有 ```签名密钥```,常用于```身份认证 和 密码校验```
身份验证过程里有两个重要概念“挑战/响应”
消息认证码,是基于消息
和密钥
生成的消息摘要
,可以与任何迭代散列函数
捆绑使用,如:HMAC(MD5)、HMAC(SHA系列)
总结
1.摘要算法,拥有防篡改性,但无法认证身份,不能防止第三方对摘要值进行冒充
2.非对称做数字证书,不善于数据的频繁加解密和验签
3.CA(Certificate Authority)数字证书认证中心,PKCS10数据包
4.CA数字证书、自签署证书(移动端不用,使用Token)
国密SM系列
- SM1 对称密码,软硬件实现性能与AES相当,算法不公开,仅以IP核的形式存在于芯片当中。应用于 电子政务、商务、警务领域
- SM2 椭圆曲线公钥密码算法,国密局2010年12月17日发布,应用于加解密和签名
- SM3 密码摘要算法,是在SHA-256上改进实现的
- SM4 对称密码,算法未知,多于无线局域网领域
- SM7 对称密码,应用于非接触式IC卡,身份识别类(门禁卡、参赛证),票务类,支付与通卡类
- SM9 标识密码算法,特点:使用方便,易于部署。
不需要申请数字证书
,应用于云技术方面(智能终端保护、云存储安全、通道加密等)
Java 密码学相关知识相关推荐
- Java多线程相关知识【17】--设计模式--上下文模式(Context)
文章目录 Java多线程相关知识[17]--设计模式--上下文模式(Context) 1. 问题的引入 2. 解决方法 1. 解决理论 2. 实操代码 上下文数据保存 上文 下文 调度者 测试上下文 ...
- java字符串相关知识
文章目录 1 基本知识 1.1 String是否是基本类型? 1.2 创建String的方式 1.3 String.StringBuilder.StringBuffer之间的关系 2 常用工具类 2. ...
- 学习Java的相关知识
工作的原因现在学习Java极其相关的技术,包括JBoss,Struts,JSP,EJB等. 感觉Java的库比较多,但做的真的一般,易用性很差,编程也非常的"片断"性,不像.NET ...
- Java并发相关知识(多线程、锁、容器、工具)
目录 一.基础知识 线程之间如何通信? Java内存模型 内存屏障 顺序一致性 CAS实现原理 原子操作 volatile synchronized 实现原理 什么是锁 原子操作类说明 高性能原子类 ...
- Java后台相关知识盘点(持续更新中)
前言 本篇博客 取自于博主工作以来 对一些Java后台开发相关的 基础知识盘点和回顾, 主要涉及到Spring SpringBoot 和MyBatis相关的知识, 未来会一直更新下去- Spring ...
- 4.Java面向对象相关知识总结
一.static关键字 1. static修饰的特点 1.1 被类的所有对象共享,是我们判断是否使用静态关键字的条件. 1.2 随着类的加载而加载,优先于对象存在(即使没有创建对象,也可以通过类名来使 ...
- java基础相关知识
1.JAVA中的单例模式 单例设计模式所解决的问题就是:保证类的对象在内存中唯一. 单例模式分为:懒汉式单例.饿汉式单例.登记式单例三种. 1)饿汉式单例类.在类初始化时,已经自行实例化 2)懒汉式单 ...
- Java数组相关知识
Java数组 1. 数组概述 2. 数组声明与创建 3. 数组初始化和内存分析 4. 数组的下标越界问题 5. 数组使用 6. 多维数组 7. Arrays类 8. 冒泡排序 9. 稀疏数组 1. 数 ...
- 安卓逆向-new-sec6-4 Java反射相关知识以及平头哥框架hook构造函数 | App发布测试版本感染
反射机制 app加上这个属性,也能发布测试版本,被成功感染,无需签名和发布那个release版本 APP是E:\1A_androidstudio_project\course4 插件是E:\1A_an ...
最新文章
- 用了这么多年的 Java 泛型,你对它到底有多了解?|原创
- sqldatasource mysql_.net的sqldatasource控件操作mysql数据库传递参数的问题
- 【Java Web开发指南】ORM一些基础问题整理
- mycncart之微店管理功能
- CodeForces - 551C GukiZ hates Boxes(二分+贪心)
- android 拦截外拨电话,Android拦截外拨电话程序示例
- Linux系统中硬盘的管理
- datax 模板_datax模板
- 吴恩达机器学习(十五)大规模机器学习(Batch、Stochastic、Mini-batch gradient descent、MapReduce)
- Java开发工具IntelliJ IDEA创建Andriod项目示例说明
- rocketmq顺序消费问题
- 实时下载速度的计算:
- 阿里Sophix热修复接入指南
- scratch四级考纲
- 不要小瞧你身边那位看起来很“懦弱”的中年人
- flask装饰器顺序
- 极验第四代滑块验证码破解(四):请求分析及加密参数破解
- 清华计算机系2018录取分数线,2018年清华大学各省录取分数线是多少?看看你离清华大学差多少分...
- 利用“爬虫软件获取某 TOP 级平台 11.8 亿条数据!嫌疑人被判刑!
- 10 款你不知道的 Linux 环境下的替代工具