哈希函数定义与特性
密码学概述
密码学简介
- 密码学是研究编制密码和破译密码的技术科学。
- 密码学是信息安全等相关议题,如认证、访问控制的核心。
- 密码学的首要目的是隐藏信息的涵义,并不是隐藏信息的存在。
- 密码学促进了计算机科学,特别是在于电脑与网络安全所使用的技术。
- 密码学已被应用在日常生活。
密码学主要功能
机密性
保密信息不会透露给非授权用户或实体
鉴别
一个消息的来源和消息本身被正确地标识,同时确保该标识没有被伪造
报文完整性
信息在生成,传输,存储和使用过程中发生的人为或非人为的非授权篡改均可以被检测到
不可否认性
用户无法在事后否认曾经进行信息的生成,签发,接收行为
密码学术语
哈希函数
什么是哈希函数
- Hash,一般翻译做散列、杂凑,或者音译为哈希,是把任意长度的输入通过哈希算法变换成固定长度的输出,该输出就是散列值。
- 能够实现该功能的算法叫做哈希算法,能够实现哈希算法要求的函数叫做哈希函数。
- 哈希函数就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
哈希算法特点
单向性
确定性
不可逆性
固定长度
抗碰撞性
常用哈希算法
MD5信息摘要算法
SHA-1安全散列算法1
SHA-256安全散列算法256
哈希函数作用
防止数据篡改
原始数据和经过哈希算法得到的数据一块发送给对方,对方收到数据之后,对数据使用相同的哈希算法进行计算,如果得到的哈希值和对方发过来的相同,那么就说明数据没有经过篡改。
软件保护
对外发布软件时,同时使用哈希函数计算出来软件的哈希值,与软件一起发布,防止用户下载假冒软件。
口令保护
账户系统的口令通过哈希函数处理后,再存储于服务器上,使得口令只对用户自己可知。
区块链与哈希算法
区块链地址生成
什么是区块链地址
区块链地址的基本概念
- 区块链地址是指区块链网络上的标识,经典的地址生成算法由公私钥产生,具有安全性和隐私性。
- 地址可以绑定数字资产,或者链上有价值的数据。
区块链地址生产原理
区块链地址可以由公钥哈希值产生;
区块链使用了非对称加密算法中的椭圆曲线算法,通过椭圆曲线算法生成了私钥;
然后通过私钥可以生成公钥;
为了安全和使用方便,区块链并不是直接使用公钥作为地址使用,而是对公钥进行一次哈希计算,得出一个新的地址。
区块链交易签名
区块链交易过程中哈希函数使用
区块链交易过程
用户A向用户B发送信息
- 用户A利用私钥对原始数据进行签名
- 然后利用用户B公钥(全网公开)对1中数据再次进行加工
- 用户B利用自己私钥解密2中数据
- 用户B利用用户A的公钥再次验证签名
过程分析
- 用户A利用自己的私钥对原始数据进行数字签名,保证发送者是用户A
- 用户B利用自己的私钥对接受到数据进行解密,防止数据被篡改
加密和传输
解密和对比确认
区块链交易签名算法
数字签名
- 数字签名是只有信息发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
- 数字签名主要是用来解决网络环境中的伪造、抵赖、冒充和篡改问题。
ECDSA签名算法
ECDSA签名的验证
区块链共识机制:POW
工作量
- 工作量是对区块头+一个随机数nonce进行两次SHA256的哈希运算
- 当哈希结果的前n位为0的时候(n为难度系数),就认为找到了一个有效的nonce,就可以生成区块并广播给其他的矿工
证明
- 对已知的区块头和随机数nonce进行两次SHA256哈希运算,验证是否满足前n位为0,满足就是一个有效的区块
- 如果需要伪造交易(修改区块头),需要重新找到一个nonce,需要大量的哈希运算并且需要对后面的所有区块都进行调整,所有计算上是不可能的
对称加密算法
对称加密体制
概述
如果一个密码体制的加密密钥和解密密钥相同,或者虽然不相同,但是其中的任意一个可以很容易地推导出另一个,则该密码体制便称为对称密钥加密体制。
特点
加密密钥和解密密钥相同,或本质上相同
密钥必须严格保密
常用算法
DES 3-DES IDEA AES ......
前置知识
分组
把很长的消息分成一组一组固定长度的数据块
替代
用一个字符替代另外一个字符
置换
把字符位置改变
密钥编排
在加密过程中不是直接使用原来的密钥,而是会把原来的一个密钥扩展成多个不同的子密钥,子密钥是有顺序的,使用的顺序就叫做密钥编排。
DES算法
DES算法由来
DES加密算法是1972年美国IBM公司研制的对称密码体制加密算法,又被称为美国数据加密标准。
DES算法特点
- 分组加密算法:明文和密文为64位分组长度
- 对称算法:加密和解密除密钥编排不同外,使用统一算法
- DES的安全性不依赖于算法保密,安全性仅以加密密钥的保密为基础
- 密钥可为任意56位数,具有复杂性,使得破译的开销超过可获得的利益
- 采用替代和置换的组合,共16轮
DES算法的基本工作原理
加密流程
用56位的密钥对64位长度的数据块进行16轮加密处理,由此得到64位长的密文
在加密过程中,会对56位密钥进行置换,生成不同的16个子密钥,依次用在16轮的加密处理中。
解密流程
在经过所有的替代,置换,异或和循环移动,获得了这样一个非常有用的性质:加密和解密可以使用相同的算法
DES解密结构与加密结构是对称相似的,使得能用相同的函数来解密或解密每个分组
唯一的不同之处是子密钥的次序相反。如果加密时各轮的子密钥是k1,k2,...k16,那么解密时的子密钥是k16,k15,...k1。
AES算法
- AES是密码学中高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准
- AES是一个新的可以用于保护电子数据的加密算法
AES算法特点
- 密钥长度(128位,192位,256位)是可变的,明文密文长度固定为128位
- AES是面向字节的运算
- AES加密算法与解密算法不一致
密钥长度(bit) | 分组长度(bit) | 加密轮次 | |
---|---|---|---|
AES-128 | 128 | 128 | 10 |
AES-192 | 192 | 128 | 12 |
AES-256 | 256 | 128 | 14 |
AES算法的基本工作原理
AES加密流程(以AES-128为例)
- 将128位的密钥扩展至加密过程中需要的10轮轮函数密钥
- 对明文进行分组,每组长度都是128位,然后一组一组的进行加密
- 加密过程中会执行一个包含各种基本运算的轮函数,轮函数加密使用密钥扩展的轮函数密钥
- 将加密后的密文拼凑起来,得到最终的完整密文
AES解密流程(以AES-128为例)
AES解密算法与加密不同,基本运算除了AddRoundKey(轮密钥加)不变外,其余都要进行逆变换。
对称加密模式简介
什么是分组加密
对明文加密方式的不同,密码体制分为:流加密和分组加密
流加密是针对明文每一个比特或者字母进行加密
分组加密是把明文切割成固定大小然后进行加密
分组加密模式
明文的长度不固定,而分组密码只能处理特定长度的一块数据,这就需要对分组密码的算法进行迭代,以便将一段很长的明文全部加密,而迭代的方法就是分组的模式。
ECB-Electronic Code Book,电子密码本模式
数据分成固定大小的数据块,然后对每个数据块使用密钥进行加密得到密文,最后将所有的密文连在一起得到最终密文。
优点
- 简单
- 有利于并行计算
- 不存在误差传递
缺点
- 不能隐藏明文的模式
- 可能对明文进行主动攻击
CBC-Clipher Block Chaining,密码块链模式
一个明文块在被加密之前要与前一个的密文块进行异或运算,还需要协商一个初始化向量,这个初始化向量没有实际意义,只是在第一次计算的时候需要用到而已。
优点
不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准。
缺点
- 不利于并行计算
- 误差传递
- 需要初始化向量
CFB-Cipher FeedBack,密文反馈模式
需要使用一个与块的大小相同的移位寄存器,并用初始化向量将寄存器初始化
接下来将寄存器内容使用块密码加密
然后将结果与明文块进行异或,以产生密文块
下一步将生产的密文块移入寄存器中,并对下面的明文块重复这一过程
优点
- 隐藏了明文模式
- 分组密码转化为流模式
- 可以及时加密传送小于分组的数据
缺点
- 不利于并行计算
- 误差传递
- 唯一的IV
OFB - Output-FeedBack,输出反馈模式
和CFB唯一区别是参与下一次加密使用的是移位寄存器与秘钥加密之后的结果,而不是密文块。
优点
- 隐藏了明文模式
- 分组密码转化为流模式
- 可以及时加密传送小于分组的数据
缺点
- 不利于并行计算
- 对明文的主动攻击是可能的
- 误差传递
非对称加密
如果一个密码体制的加密/解密操作分别使用两个不同的密钥,并且不可能由加密密钥推导出解密密钥,则该密码体制称为非对称加密体制。
其特点为
加密密钥和解密密钥不同,并且难以互推
有一个密钥是公开的,即公钥,而另一个密钥是保密的,即私钥
公钥加密算法(RSA)
RSA算法简单的原理
RSA算法基于一个非常简单的数论事实:两个素数(质数)相乘得到一个大数很容易,但是由一个大数分解为两个素数(质数)相乘却非常难。
RSA算法是一种非对称的算法,该算法需要一对密钥,使用其中一个加密另一个可以进行解密。
RSA算法的特点
安全性依赖于大数的质因子分解
破解密钥的成本远大于收益
产生密钥很麻烦,需要花费的时间很长
只能加密少量数据,大量数据加密还需对称加密
椭圆曲线密码体制(ECC)
Neal Koblitz和Victor Miller在1985年分别提出了椭圆曲线密码体制(ECC),它是迄今为止被实践证明安全有效的三类公钥密码体制之一。
- ECC的安全性基于椭圆曲线离散对数问题的难解性
- ECC密钥长度大大减少
- 1998年被ISO/IEC定为数字签名标准,2000年2月定为IEEE标准。
区块链中主要使用非对称加密的ECC椭圆曲线算法。
椭圆曲线公钥系统的优点
椭圆曲线公钥系统是代替RSA的强有力竞争者,有以下优点:
安全性能更高
如:256位ECC与3072位RSA有相同的安全强度
计算量小,处理速度快
在私钥的处理速度上(解密和签名),ECC远比RSA、DSA快得多
存储空间占用小
ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多,所以占用的存储空间小得多
公开密钥基础设施
PKI
PKI定义
PKI是Public Key Infrastructure的首字母缩写,翻译过来就是公开密钥基础设施。
PIK是一种遵循标准的利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。
PKI技术是一种遵循既定标准的密钥管理平台,它的基础是加密技术,核心是证书服务,支持集中自动的密钥管理和密钥分配,能够为所有的网络应用提供加密和数字签名等密码服务及所需的密钥和证书管理体系。
PKI的功能
管理加密密钥和证书的公布,提供密钥管理、证书管理和策略管理等
运用数字证书解决数据安全中的私密性、完整性、不可否认性等问题
PKI基本组件
一个典型、完整、有效的PKI应用系统至少应该具有以下部分
数字证书
包含了用于签名和加密数据的公钥的电子凭证,是PKI的核心元素
认证中心(CA)
数字证书的申请及签发机关,CA必须具备权威性
证书资料库
存储已经签发的数字证书和公钥,以及相关证书目录,便于用户获取
证书吊销列表
在有效期内吊销的证书列表,在线证书状态协议OCSP是获得证书状态的国际协议
密钥备份及恢复
为避免因用户丢失解密密钥而无法解密合法数据的情况,PKI提供备份与恢复密钥的机制。
证书签发
基于证书的公钥分发机制
证书的形成
互联网络的用户群决不是几个人互相信任的小集体。
从法律角度讲互联网用户群体彼此之间都不能轻易信任,所以公钥加密体系采取了另一个办法,将公钥和公钥的主人名字联系在一起,再请一个大家都信得过的有信誉的公正权威机构确认,并加上这个权威机构的签名。这就形成了证书。
什么是CA?
由于证书上有权威机构的签字,所以大家都认为证书上的内容是可信任的;又由于证书上有主人的名字等身份信息,别人就很容易地知道公钥的主人是谁。
权威机构就是电子签证机关,即CA。
用户如何获取证书
如果用户想得到一份属于自己的证书,他应先向CA提出申请,在CA判明申请者的身份后,便为他分配一个公钥,并且CA将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给那个用户(申请者)。
用户如何验证证书
如果一个用户想鉴别另一个证书的真伪,他就用CA的公钥对那个证书上的签字进行验证(如前所述,CA签字实际上是经过CA私钥加密的信息,签字验证的过程还伴随使用CA公钥解密的过程),一旦验证通过,该证书就被认为是有效的。
CA除了签发证书之外,它的另一个重要作用是证书和密钥的管理。
CA的严格层次结构
其可以表示为一颗倒置的树,根节点代表根CA,它起到信任根或者源头的作用。这个严格层次的产生过程是:
- 根CA为直接在其下的CA创建和签署证书
- 中间节点代表的CA为其下的子节点CA用户创建和签署证书
- 倒数第二层的节点代表CA为其下子节点用户创建和签署证书
在此层次结构中,每个实体都拥有根CA的公钥
证书有效性的管理机制
证书的有效性取决于两个方面因素
证书有效期
证书的有效期在证书被颁发之日就已经确定了,例如CFCA规定个人证书的有效期是一年(可扩展),企业证书的有效性是三年。已经过了有效期的证书不能挺过验证。
证书注销
虽然证书有效期没有过,但是如果发生了特殊情况,例如用户发现证书遗失或私钥失密,用户会向CA/RA提出注销证书的申请,CA/RA经过审核后将实施证书注销,那么,被注销的证书也不能挺过验证。
证书吊销管理方案
常用的证书吊销管理方案有两种
CRL(证书吊销列表)
- CRL是一个具有时间戳的列表,在其中列出了所有已经吊销或挂起的数字证书信息
- CA管理吊销证书列表,所有客户端应该维护CRLs的缓存
- 每当CA更新吊销证书列表时,所有的客户端也应该同步更新
OCSP(在线证书状态协议)
- 用户收到证书验证请求后,并将请求转发到一个OCSP应答器(服务器)。
- 应答器建立与CA证书库的连接,并查询CA证书库而获得该证书的状态,应答器返回客户机有关证书有效性信息。