㈠ 顺丰如何看是不是信息加密
顺丰如何看信息加密要打开电脑上的搜索引擎。
1、在搜索框内输入顺丰速运点击搜索。
2、在顺丰速运中输入丰密运单号,点击立即查询即可。顺丰是国内的快递物流综合服务商,总部位于深圳,经过多年发展,已初步建立为客户提供一体化综合物流解决方案的能力,不仅提供配送端的物流服务,还延伸至价值链前端的产、供、销、配等环节,从消费者需求出发,以数据为牵引,利用大数据分析和云计算技术,为客户提供仓储管理、销售预测、大数据分析、金融管理等解决方案。
㈡ 加密技术06-加密总结
对称密码是一种用相同的密钥进行加密和解密的技术,用于确保消息的机密性。在对称密码的算法方面,目前主要使用的是 AES。尽管对称密码能够确保消息的机密性,但需要解决将解密密钥配送给接受者的密钥配送问题。
主要算法
DES
数据加密标准(英语:Data Encryption Standard,缩写为 DES)是一种对称密钥加密块密码算法,1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来。它基于使用56位密钥的对称算法。
DES现在已经不是一种安全的加密方法,主要因为它使用的56位密钥过短。
原理请参考: 加密技术01-对称加密-DES原理
3DES
三重数据加密算法(英语:Triple Data Encryption Algorithm,缩写为TDEA,Triple DEA),或称3DES(Triple DES),是一种对称密钥加密块密码,相当于是对每个数据块应用三次DES算法。由于计算机运算能力的增强,原版DES由于密钥长度过低容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。
注意:有3个独立密钥的3DES的密钥安全性为168位,但由于中途相遇攻击(知道明文和密文),它的有效安全性仅为112位。
3DES使用“密钥包”,其包含3个DES密钥,K1,K2和K3,均为56位(除去奇偶校验位)。
密文 = E k3 (D k2 (E k1 (明文)))
而解密则为其反过程:
明文 = D k3 (E k2 (D k1 (密文)))
AES
AES 全称 Advanced Encryption Standard(高级加密标准)。它的出现主要是为了取代 DES 加密算法的,因为 DES 算法的密钥长度是 56 位,因此算法的理论安全强度是 56 位。于是 1997 年 1 月 2 号,美国国家标准技术研究所宣布什望征集高级加密标准,用以取代 DES。AES 也得到了全世界很多密码工作者的响应,先后有很多人提交了自己设计的算法。最终有5个候选算法进入最后一轮:Rijndael,Serpent,Twofish,RC6 和 MARS。最终经过安全性分析、软硬件性能评估等严格的步骤,Rijndael 算法获胜。
AES 密码与分组密码 Rijndael 基本上完全一致,Rijndael 分组大小和密钥大小都可以为 128 位、192 位和 256 位。然而 AES 只要求分组大小为 128 位,因此只有分组长度为 128 位的 Rijndael 才称为 AES 算法。
本文 AES 默认是分组长度为 128 位的 Rijndael 算法
原理请参考: 加密技术02-对称加密-AES原理
算法对比
公钥密码是一种用不同的密钥进行加密和解密的技术,和对称密码一样用于确保消息的机密性。使用最广泛的一种公钥密码算法是 RAS。和对称密码相比,公钥密码的速度非常慢,因此一般都会和对称密码一起组成混合密码系统来使用。公钥密码能够解决对称密码中的密钥交换问题,但存在通过中间人攻击被伪装的风险,因此需要对带有数字签名的公钥进行认证。
公钥密码学的概念是为了解决对称密码学中最困难的两个问题而提出
应用场景
几个误解
主要算法
Diffie–Hellman 密钥交换
迪菲-赫尔曼密钥交换(英语:Diffie–Hellman key exchange,缩写为D-H) 是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。公钥交换的概念最早由瑞夫·墨克(Ralph C. Merkle)提出,而这个密钥交换方法,由惠特菲尔德·迪菲(Bailey Whitfield Diffie)和马丁·赫尔曼(Martin Edward Hellman)在1976年发表,也是在公开文献中发布的第一个非对称方案。
Diffie–Hellman 算法的有效性是建立在计算离散对数很困难的基础上。简单地说,我们可如下定义离散对数。首先定义素数 p 的本原跟。素数 p 的本原根是一个整数,且其幂可以产生 1 到 p-1 之间所有整数,也就是说若 a 是素数 p 的本原根,则
a mod p, a 2 mod p,..., a p-1 mod p 各不相同,它是整数 1 到 p-1 的一个置换。
对任意整数 b 和素数 p 的本原跟 a,我们可以找到唯一的指数 i 使得
b ≡ a i (mod p) 其中 0 <= i <= p-1
其中 a, b, p 这些是公开的,i 是私有的,破解难度就是计算 i 的难度。
Elgamal
1985年,T.Elgamal 提出了一种基于离散对数的公开密钥体制,一种与 Diffie-Hellman 密钥分配体制密切相关。Elgamal 密码体系应用于一些技术标准中,如数字签名标准(DSS) 和 S/MIME 电子邮件标准。
基本原理就是利用 Diffie–Hellman 进行密钥交换,假设交换的密钥为 K,然后用 K 对要发送的消息 M,进行加密处理。
所以 Elgamal 的安全系数取决于 Diffie–Hellman 密钥交换。
另外 Elgamal 加密后消息发送的长度会增加一倍。
RSA
MIT 的罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在 1977 年提出并于 1978 年首次发表的算法。RSA 是最早满足要求的公钥算法之一,自诞生日起就成为被广泛接受且被实现的通用的公钥加密方法。
RSA 算法的有效性主要依据是大数因式分解是很困难的。
原理请参考: 加密技术03-非对称加密-RSA原理
ECC
大多数使用公钥密码学进行加密和数字签名的产品和标准都使用 RSA 算法。我们知道,为了保证 RSA 使用的安全性,最近这些年来密钥的位数一直在增加,这对使用 RSA 的应用是很重的负担,对进行大量安全交易的电子商务更是如此。近来,出现的一种具有强大竞争力的椭圆曲线密码学(ECC)对 RSA 提出了挑战。在标准化过程中,如关于公钥密码学的 IEEE P1363 标准中,人们也已考虑了 ECC。
与 RSA 相比,ECC 的主要诱人之处在于,它可以使用比 RSA 短得多的密钥得到相同安全性,因此可以减少处理负荷。
ECC 比 RSA 或 Diffie-Hellman 原理复杂很多,本文就不多阐述了。
算法对比
公钥密码体制的应用
密码分析所需计算量( NIST SP-800-57 )
注:L=公钥的大小,N=私钥的大小
散列函数是一种将长消息转换为短散列值的技术,用于确保消息的完整性。在散列算法方面,SHA-1 曾被广泛使用,但由于人们已经发现了一些针对该算法理论上可行的攻击方式,因此该算法不应再被用于新的用途。今后我们应该主要使用的算法包括目前已经在广泛使用的 SHA-2,以及具有全新结构的 SHA-3 算法。散列函数可以单独使用,也可以作为消息认证、数字签名以及伪随机数生成器等技术的组成元素来使用。
主要应用
主要算法
MD5
MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个 128 位( 16 字节,被表示为 32 位十六进制数字)的散列值(hash value),用于确保信息传输完整一致。MD5 由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于 1992 年公开,用以取代 MD4 算法。这套算法的程序在 RFC 1321 中被加以规范。
2009年,中国科学院的谢涛和冯登国仅用了 2 20.96 的碰撞算法复杂度,破解了MD5的碰撞抵抗,该攻击在普通计算机上运行只需要数秒钟。2011年,RFC 6151 禁止MD5用作密钥散列消息认证码。
原理请参考: 加密技术04-哈希算法-MD5原理
SHA-1
SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦资料处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。
2005年,密码分析人员发现了对SHA-1的有效攻击方法,这表明该算法可能不够安全,不能继续使用,自2010年以来,许多组织建议用SHA-2或SHA-3来替换SHA-1。Microsoft、Google以及Mozilla都宣布,它们旗下的浏览器将在2017年停止接受使用SHA-1算法签名的SSL证书。
2017年2月23日,CWI Amsterdam与Google宣布了一个成功的SHA-1碰撞攻击,发布了两份内容不同但SHA-1散列值相同的PDF文件作为概念证明。
2020年,针对SHA-1的选择前缀冲突攻击已经实际可行。建议尽可能用SHA-2或SHA-3取代SHA-1。
原理请参考: 加密技术05-哈希算法-SHA系列原理
SHA-2
SHA-2,名称来自于安全散列算法2(英语:Secure Hash Algorithm 2)的缩写,一种密码散列函数算法标准,由美国国家安全局研发,由美国国家标准与技术研究院(NIST)在2001年发布。属于SHA算法之一,是SHA-1的后继者。其下又可再分为六个不同的算法标准,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。
SHA-2 系列的算法主要思路和 SHA-1 基本一致
原理请参考: 加密技术05-哈希算法-SHA系列原理
SHA-3
SHA-3 第三代安全散列算法(Secure Hash Algorithm 3),之前名为 Keccak 算法。
Keccak 是一个加密散列算法,由 Guido Bertoni,Joan Daemen,Michaël Peeters,以及 Gilles Van Assche 在 RadioGatún 上设计。
2012年10月2日,Keccak 被选为 NIST 散列函数竞赛的胜利者。SHA-2 目前没有出现明显的弱点。由于对 MD5、SHA-0 和 SHA-1 出现成功的破解,NIST 感觉需要一个与之前算法不同的,可替换的加密散列算法,也就是现在的 SHA-3。
SHA-3 在2015年8月5日由 NIST 通过 FIPS 202 正式发表。
原理请参考: 加密技术05-哈希算法-SHA系列原理
算法对比
㈢ 饿了么外卖,电话加密是什么
隐藏真实联系方式。饿了么外卖电话加密是一种安全装置方式,是指隐藏真实联系方式,“饿了么”是2008年创立的本地生扒茄活平台,主营在线禅此派外卖、新零售、即时配送和餐饮供贺贺应链等业务。
㈣ 在外卖、快递等配送服务中,用户个人信息安全如何保证
随着电商行业的发展,越来越多的人会选择在平台上留下自己的联系方式,然后让商家将自己购买的商品交给配送人员,以便让配送人员送到自己的家中。这样确实很方便,于是越来越多的人喜欢在网上订餐,或者在网上买东西。可是,也有越来越多的网友反映,自己接到诈骗电话以及推销电话的频率越来越高了。于是,如何保护自己的信息成了人们热议的焦点。
网友保护自己信息的方式五花八门,有许多方法可谓是十分机智了。我们在使用快递或者外卖服务的时候确实应该考虑到信息安全问题,避免因为自己的个人信息泄露导致一些坏人有机可乘,继而伤害到自己或者家人。
㈤ 寄快递信息加密收件人能收到吗
如果孙歼您镇野在寄快递时选择了加密收件人信息,那么收件人是可以正常接收到快递的。一般来说,加密只会对个别敏感信息进行处理(例如手机号码、地址等),而不会影响整个快递流程。
具体来说,在使用某些物流公司的在线下单系统或者APP时,可能会提供“隐私保护”、“加密显示”等选项。这些选项可以帮助用户隐藏部分个人信息,并且仅在必要情况下才向相关工作人员展示。
需要注意的是,在使用此类功能时,请务必填写准确无误的联系方式和地址御凯喊信息,并及时与收件人沟通确认。否则可能因为信息错误或者缺失而导致配送延迟、退回等问题。
㈥ 加密那些事--非对称加密详解
“非对称加密也叫公钥密码:使用公钥 加密 ,使用私钥解密”
在对称密码中,由于加密和解密的密钥是相同的,因此必须向接收者配送密钥。用于解密的密钥必须被配送给接收者,这一问题称为密钥配送问题。如果使用非对称加密,则无需向接收者配送用于解密的密钥,这样就解决了密钥配送的问题。
非对称加密中,密钥分为加密密钥和解密密钥两种。发送者用加密密钥对消息进行加密,接收者用解密密钥对密文进行解密。需理解公钥密码,清楚地分加密密钥和解密密钥是非常重要的。加密密钥是发送者加密时使用的,而解密密钥则是接收者解密时使用的。
加密密钥和解密密钥的区别:
a.发送者只需要加密密钥
b.接收者只需要解密密钥
c.解密密钥不可以被窃听者获取
d.加密密钥被窃听者获取也没关系
也就是说,解密密钥从一开始就是由接收者自己保管的,因此只要将加密密钥发给发送者就可以解决密钥配送问题了,而根本不需要配送解密密钥。
非对称加密中,加密密钥一般是公开的。真是由于加密密钥可以任意公开,因此该密钥被称为公钥(pulickey)。相对地解密密钥是绝对不能公开的,这个密钥只能由你自己来使用,因此称为私钥(privatekey)****。私钥不可以被别人知道,也不可以将它发送给别人。
公钥和私钥是"一一对应的",一对公钥和私钥统称为密钥对(keypair)。由公钥进行加密的密文,必须使用与该公钥配对的私钥才能解密。密钥对中的两个密钥之间具有非常密切的的关系(数学上的关系)。因此公钥和私钥不能分别单独生成。
非对称加密通讯流程
假设A要给B发一条信息,A是发送者,B是接收者,窃听者C可以窃听他们之间的通讯内容。
1.B生成一个包含公钥和私钥的密钥对
私钥由B自行妥善保管
2.B将自己的公钥发送给A
B的公钥被C截获也没关系。将公钥发给A,表示B请A用这个公钥对消息进行加密并发送给他。
3.A用B的公钥对消息进行加密
加密后的消息只有B的私钥才能够解密。
虽然A拥有B的公钥,但用B的公钥是无法对密文进行解密的。
4.A将密文发送给B
密文被C截获也没关系,C可能拥有B的公钥,但是B的公钥是无法进行解密的。
5.B用自己的私钥对密文进行解密。
参考下图
RSA是一种非对称加密算法,它的名字由三位开发者。即RonRivest、AdiShamir和LeonardAdleman 的姓氏的首字母组成的(Rivest-Shamir-Leonard)
RSA的加密工程可以用下来公式来表达,如下。
也就是说,RSA的密文是对代表明文的数字的E次方求modN的结果。换句话说,就是将明文自己做E次乘法,然后将其结果除以N求余数,这个余数就是密文。
RSA的加密是求明文的E次方modN,因此只要知道E和N这两个数,任何人都可以完成加密的运算。所以说E和N是RSA加密的密钥。也就是说E和N的组合就是公钥
有一个很容易引起误解的地方需要大家注意一一E和N这两个数并不是密钥对(公钥和私钥的密钥对)。E和N两个数才组成了一个公钥,因此我们一般会写成 “公钥是(E,N)” 或者 “公钥是{E, N}" 这样的形式,将E和N用括号括起来。
1.3.2 RSA解密
RSA的解密和加密一样简单,可以用下面的公式来表达:
也就是说,对表示密文的数字的D次方求modN就可以得到明文。换句话说,将密文自己做D次乘法,在对其结果除以N求余数,就可以得到明文 。
这里所使用的数字N和加密时使用的数字N是相同的。数D和数N组合起来就是RSA的解密密钥,因此D和N的组合就是私钥。只有知道D和N两个数的人才能够完成解密的运算。
大家应该已经注意到,在RSA中,加密和解密的形式是相同的。加密是求 "E次方的mod N”,而解密则是求 "D次方的modN”,这真是太美妙了。
当然,D也并不是随便什么数都可以的,作为解密密钥的D,和数字E有着相当紧密的联系。否则,用E加密的结果可以用D来解密这样的机制是无法实现的。
顺便说一句, D是解密〈Decryption)的首字母,N是数字(Number)的首字母 。
RSA加密和解密
声明该文章仅做个人学习使用,无任何商业用途。
原文链接:https://blog.csdn.net/atlansi/article/details/111144109
㈦ 前后端分类,数据传输问题
目前我所知道的项目开发中,基本上都是前后端分离的。这就出现了数据传输的问题,前端传给服务器 或者 服务器传给前端的数据都是容易被别人窃取的。这里就要对传输的数据进行加解密,以保证数据安全。
下面介绍两种前后端数据传输的方式
前后端约定一个key,将请求参数按照字母排序拼接成一个字符串(通常都是ASCll排序),然后拼接上key,最后用MD5或者SHA进行加密,得到一个加密的签名sign,再把sign作为最后一个参数传到服务端。
服务端拿到前端传过来的结果之后,也将参数(排除sign)按照顺序拼接成一个字符串,再拼接上key,再用MD5或者SHA进行加密,也得到了一个新的sign,服务端比较这两个sign,如果相同就说明传回来的数据没有问题,如果不相同,说明数据被串改了。
例如:
传递的参数是
id=5&age=10
现在通过加签 应该传递的参数为
id=5&age=10&sign=MD5(age=10&id=5)
服务端拿到的就是
id=5&age=10&sign=MD5(age=10&id=5)
服务端经过筛选参数,得到 id=5&age=10 ,然后进行排序得到 age=10&id=5 ,再MD5得到sign,颂敏两个sign进行比较
目前我知道的根据秘钥的使用方法,可以将密码分为两种
在对称密码中,加密、解密时使用的是同一个密钥,我们常用的AES算法就是对称密码算法。具体AES算法大家自己网络就好了
但是通常使用对称密码时,就会有秘钥配送问题。
例:发送者A将使用对称密码加密过得信息发送给接收者B,只有将秘钥发送给接收者B,B才能进行解密,这里A发送秘钥给B的过程中,就容易被别人窃取秘钥,别人拿着秘钥也能进行解密。
如何解决秘钥配送问题
我知道的几种解决方法
公钥密码
公钥密码中,密钥分为加密密钥、解密密钥2种,它们并不是同一个密钥。
目前使用最广泛的公钥密码算法是RSA
加密密钥,一般是公开的,因此该密钥称为公钥(public key)
解密密钥,由消息接收者自己保管的,不能公开,因此也称为私钥(private key)
公钥和私钥是一 一对应的,是不能单独生成的,一对公钥和密钥统称为密钥对(key pair)
由公钥加密的密文,必须使用与该公钥对应的私钥才能解密
由私钥加密的密文,必野或枝须使用与该私钥对应的公钥才能解密
1.由消息的接收者,生成一对公钥、私钥
2.将公钥发给消息的发送者
3.消息的发送者使用公钥加密消息
混合密码系统
不能很好地解决密钥配送问题
加密解密速度比较慢
混合密码系统,是将对称密码和公钥密码的优势相团银结合的方法,解决了公钥密码速度慢的问题,并通过公钥密码解决了对称密码的密钥配送问题
会话密钥(session key)为本次通信随机生成的临时密钥,作为对称密码的密钥,用于加密信息,提高速度
发送出去的内容包括
前端A >>>>> 服务器端B
发送过程,加密过程
接收过程,解密过程
文章参考了 猿天地的再谈前后端API签名安全? 和李明杰的底层原理iOS签名机制
㈧ 京东快递农村送货上门吗
可以。
以重庆下庄村为例,京东快递农村可以实现送货上门。2021年3月,家住重庆市巫山县竹贤乡下庄村的居民收到了其数天前在京东商城下单的一套护肤品。让其没想到的是,以往都要托村民帮着去隔壁镇上取货,这次竟然快递直接送到家则孝贺门口。
由于下庄村位置偏远,很多快递公司都只能把商品送到相邻的骡坪镇上,村民只能自取或者托人顺路带回来,来回需要2个小时。此番送货,让京东物流成为巫山县下庄村第一个送货上门的企业。
京东快递乡镇村落配送
京东快递巫山县营业部负责人李孙派宏伟介绍,京东快递加速网络下沉,将触角延伸至一些偏僻村庄,2021年2月底,包括下庄村在内的几个偏远村落实现了送货上门。此次送货,他中午10时就从县城出发了,连翻两座大山,70多公里的路程,开了3个小时车才到。
为解决农村地区末端慎森配送的难题,近年来京东快递加快网络下沉,坚持送货上门,通过建设中转场地、投入智能设备与加密配送班次等举措,面向低线区县、乡镇村落布局物流基础设施建设。
同时,创新推出乡村共配模式,在全国700多个物流覆盖成本较高和时效较差的偏远乡镇地区,建设以共同配送为基础的末端综合性服务站,全面提升快递服务时效。
以上内容参考中国交通新闻网——“天坑村”也能收快递了
㈨ 图文彻底搞懂非对称加密(公钥密钥)
前文详细讲解了对称加密及算法原理。那么是不是对称加密就万无一失了呢?对称加密有一个天然的缺点,就是加密方和解密方都要持有同样的密钥。你可以能会提出疑问:既然要加、解密,当然双方都要持有密钥,这有什么问题呢?别急,我们继续往下看。
我们先看一个例子,小明和小红要进行通信,但是不想被其他人知道通信的内容,所以双方决定采用对称加密的方式。他们做了下面的事情:
1、双方商定了加密和解密的算法
2、双方确定密钥
3、通信过程中采用这个密钥进行加密和解密
这是不是一个看似完美的方案?但其中有一个步骤存在漏洞!
问题出在步骤2:双方确定密钥!
你肯定会问,双方不确定密钥,后面的加、解密怎么做?
问题在于确定下来的密钥如何让双方都知道。密钥在传递过程中也是可能被盗取的!这里引出了一个经典问题:密钥配送问题。
小明和小红在商定密钥的过程中肯定会多次沟通密钥是什么。即使单方一次确定下来,也要发给对方。加密是为了保证信息传输的安全,但密钥本身也是信息,密钥的传输安全又该如何保证呢?难不成还要为密钥的传输再做一次加密?这样不就陷入了死循环?
你是不是在想,密钥即使被盗取,不还有加密算法保证信息安全吗?如果你真的有这个想法,那么赶紧复习一下上一篇文章讲的杜绝隐蔽式安全性。任何算法最终都会被破译,所以不能依赖算法的复杂度来保证安全。
小明和小红现在左右为难,想加密就要给对方发密钥,但发密钥又不能保证密钥的安全。他们应该怎么办呢?
有如下几种解决密钥配送问题的方案:
非对称加密也称为公钥密码。我更愿意用非对称加密这种叫法。因为可以体现出加密和解密使用不同的密钥。
对称加密中,我们只需要一个密钥,通信双方同时持有。而非对称加密需要4个密钥。通信双方各自准备一对公钥和私钥。其中公钥是公开的,由信息接受方提供给信息发送方。公钥用来对信息加密。私钥由信息接受方保留,用来解密。既然公钥是公开的,就不存在保密问题。也就是说非对称加密完全不存在密钥配送问题!你看,是不是完美解决了密钥配送问题?
回到刚才的例子,小明和下红经过研究发现非对称加密能解决他们通信的安全问题,于是做了下面的事情:
1、小明确定了自己的私钥 mPrivateKey,公钥 mPublicKey。自己保留私钥,将公钥mPublicKey发给了小红
2、小红确定了自己的私钥 hPrivateKey,公钥 hPublicKey。自己保留私钥,将公钥 hPublicKey 发给了小明
3、小明发送信息 “周六早10点soho T1楼下见”,并且用小红的公钥 hPublicKey 进行加密。
4、小红收到信息后用自己的私钥 hPrivateKey 进行解密。然后回复 “收到,不要迟到” 并用小明的公钥mPublicKey加密。
5、小明收到信息后用自己的私钥 mPrivateKey 进行解密。读取信息后心里暗想:还提醒我不迟到?每次迟到的都是你吧?
以上过程是一次完整的request和response。通过这个例子我们梳理出一次信息传输的非对称加、解密过程:
1、消息接收方准备好公钥和私钥
2、私钥接收方自己留存、公钥发布给消息发送方
3、消息发送方使用接收方公钥对消息进行加密
4、消息接收方用自己的私钥对消息解密
公钥只能用做数据加密。公钥加密的数据,只能用对应的私钥才能解密。这是非对称加密的核心概念。
下面我用一个更为形象的例子来帮助大家理解。
我有下图这样一个信箱。
由于我只想接收我期望与之通信的朋友信件。于是我在投递口加了一把锁,这把锁的钥匙(公钥)我可以复制n份,发给我想接受其信件的人。只有这些人可以用这把钥匙打开寄信口,把信件投入。
相信通过这个例子,可以帮助大家彻底理解公钥和私钥的概念。
RSA 是现在使用最为广泛的非对称加密算法,本节我们来简单介绍 RSA 加解密的过程。
RSA 加解密算法其实很简单:
密文=明文^E mod N
明文=密文^D mod N
RSA 算法并不会像对称加密一样,用玩魔方的方式来打乱原始信息。RSA 加、解密中使用了是同样的数 N。公钥是公开的,意味着 N 也是公开的。所以私钥也可以认为只是 D。
我们接下来看一看 N、E、D 是如何计算的。
1、求 N
首先需要准备两个很大质数 a 和 b。太小容易破解,太大计算成本太高。我们可以用 512 bit 的数字,安全性要求高的可以使用 1024,2048 bit。
N=a*b
2、求 L
L 只是生成密钥对过程中产生的数,并不参与加解密。L 是 (a-1) 和 (b-1) 的最小公倍数
3、求 E(公钥)
E 有两个限制:
1<E<
E和L的最大公约数为1
第一个条件限制了 E 的取值范围,第二个条件是为了保证有与 E 对应的解密时用到的 D。
4、求 D(私钥)
D 也有两个限制条件:
1<D<L
E*D mod L = 1
第二个条件确保密文解密时能够成功得到原来的明文。
由于原理涉及很多数学知识,这里就不展开细讲,我们只需要了解这个过程中用到这几个数字及公式。这是理解RSA 安全性的基础。
由于 N 在公钥中是公开的,那么只需要破解 D,就可以解密得到明文。
在实际使用场景中,质数 a,b 一般至少1024 bit,那么 N 的长度在 2048 bit 以上。D 的长度和 N 接近。以现在计算机的算力,暴力破解 D 是非常困难的。
公钥是公开的,也就是说 E 和 N 是公开的,那么是否可以通过 E 和 N 推断出 D 呢?
E*D mod L = 1
想要推算出 D 就需要先推算出 L。L 是 (a-1) 和 (b-1) 的最小公倍数。想知道 L 就需要知道质数 a 和 b。破解者并不知道这两个质数,想要破解也只能通过暴力破解。这和直接破解 D 的难度是一样的。
等等,N 是公开的,而 N = a*b。那么是否可以对 N 进行质因数分解求得 a 和 b 呢?好在人类还未发现高效进行质因数分解的方法,因此可以认为做质因数分解非常困难。
但是一旦某一天发现了快速做质因数分解的算法,那么 RSA 就不再安全
我们可以看出大质数 a 和 b 在 RSA 算法中的重要性。保证 a 和 b 的安全也就确保了 RSA 算法的安全性。a 和 b 是通过伪随机生成器生成的。一旦伪随机数生成器的算法有问题,导致随机性很差或者可以被推断出来。那么 RSA 的安全性将被彻底破坏。
中间人攻击指的是在通信双方的通道上,混入攻击者。他对接收方伪装成发送者,对放送放伪装成接收者。
他监听到双方发送公钥时,偷偷将消息篡改,发送自己的公钥给双方。然后自己则保存下来双方的公钥。
如此操作后,双方加密使用的都是攻击者的公钥,那么后面所有的通信,攻击者都可以在拦截后进行解密,并且篡改信息内容再用接收方公钥加密。而接收方拿到的将会是篡改后的信息。实际上,发送和接收方都是在和中间人通信。
要防范中间人,我们需要使用公钥证书。这部分内容在下一篇文章里会做介绍。
和对称加密相比较,非对称加密有如下特点:
1、非对称加密解决了密码配送问题
2、非对称加密的处理速度只有对称加密的几百分之一。不适合对很长的消息做加密。
3、1024 bit 的 RSA不应该在被新的应用使用。至少要 2048 bit 的 RSA。
RSA 解决了密码配送问题,但是效率更低。所以有些时候,根据需求可能会配合使用对称和非对称加密,形成混合密码系统,各取所长。
最后提醒大家,RSA 还可以用于签名,但要注意是私钥签名,公钥验签。发信方用自己的私钥签名,收信方用对方公钥验签。关于签名,后面的文章会再详细讲解。
㈩ iOS中的签名机制
说到签名机制,首先要了解一下 加密解密 ,签名文件就是 加密解密 的过程。
加密 是将明文信息改变为难以读取的密文内容,使之不可读的过程。
解密 是通过特殊的对象,将密文还原为正常可读的内容的过程。而在这个过程中,我们所使用的方法,就是加密解密算法。
加密分为 对称加密 与 非对称加密(公开密钥加密) 。
对称加密就是加密和解密使用的都是同一套密钥
常见的对称密码算法有:
如下图,在使用对称密码时,一定会遇到密钥配送问题, 假设,Alice将使用对称密码加密过的消息发给了Bob, 只有将密钥发送给Bob,Bob才能完成解密, 在发送密钥过程中,可能会被Eve窃取密钥,最后Eve也能完成解密。
加密和解密使用的不是同一个密钥,即为非对称加密算法,也称公开密钥加密;
公钥密码中,密钥分为加密密钥、解密密钥2种,它们并不是同一个密钥, 公钥密码也被称为非对称密码银亏(Asymmetric Cryptography)
在公钥密码中:
加密密钥 ,一般是公开的,因此该密钥称为 公钥 (public key)
解密密钥 ,由消息接收者自己保管的,不能公开,因此也称为 私钥 (private key) 公钥和私钥是一 一对应的,是不能单独生成的,一对公钥和密钥统称为密钥对(key pair)
这样就能 解决秘钥配送的问题 了,如下图:
上图解析:
这其中如果有第三者窃听,只有第2步和第4步能够监听数据,由于Bob公钥是公开的谁都可以获取,那么第二步也不用担心被谁获取,第4步如果数据被第三者截获,那么他看到的也是加密后的数据,由于他没有Bob的私钥,那么他也无法知道消息的真实内容。而且他即使篡改密文消息也无任何意义。
虽然非对称加密解决了密钥配送问题,但是它的加解密速度较慢,下面我们总结一下对称和非对称加密的优缺点:
混合密码 系统,是将对称密码和公钥密码的优势相结合的方法:
为本次通信随机生成的临时密钥; 作为对称密码的密钥,用于加密消息,提高速度
首先,消息发送者要拥有消息接收者的公钥; 生成会话密钥,作为对称密码的密钥,加密消息; 用消息接收者的公钥,加密会话密钥; 将前2步生成的加密结果,一并发给消息接收者。
发送出去的内容包括
用会话密钥加密的消息(加密方法:对称密码)
用公钥加密的谨搏吵会话密钥(加密方法:公钥密码)
1 消息接收者用自己的私钥解密出会话密钥
2 再用第1步解密出来的会话密钥,解密消息
发送过程,加密过程
接收过程,解密过程
1.Bob利用自己的私钥解密会话密钥(使用的是公钥密码解密,也就是非对称密码解密)
2.Bob利用会话密钥解密发送过来的消息(使用的是对称密码解密)
上面的加密算法解决了数据传输的安全问题,那么 数据的完整性 是没法验证的,就是我这个数据有没有被改过,因为公钥大家都能获取,如果有中间人拦截了消息,并改动了内容。那么我们如何验证这个 消息有没有变动 呢?
单向散列函数 ,又称单向 Hash函数 、 杂凑函数 ,就是把任意长的输入消息串变化成 固定长的输出串 且由输出串难以得到输入串的一种函数。这个输出串称为该消息的散列值。一般用于产生消息摘要,密钥加密等
单向散列函数,可以根据根据消息内容计算出散列值 散列祥侍值的长度和消息的长度无关 ,无论消息是1bit、10M、100G,单向散列函数都会计算出 固定长度的散列值 。
单向散列函数 ,又被称为 消息摘要函数 (message digest function),哈希函数输出的散列值,也被称为消息摘要(message digest)、指纹(fingerprint)
MD4、MD5 产生128bit的散列值,MD就是Message Digest的缩写,目前已经不安全 Mac终端上默认可以使用md5命令
SHA-1 产生160bit的散列值,目前已经不安全
SHA-2 SHA-256、SHA-384、SHA-512,散列值长度分别是256bit、384bit、512bit
SHA-3 全新标准
不同的数据生成的散列值是不一样的,只要你对一个文件改动过,那么它的散列值就会发生变化,要想确定我们的数据有没有发生变化,只要对比两次散列值相不相同就可以了,我们常常做的登录功能,在保存用户密码的时候就采用单项散列函数生成的值来进行保存,防止第三方人员串改密码。
数据防篡改的技术我们知道了,在数据传输的过程中,我们对数据生成一个散列值,和发送的数据一并发给接收者,当接收者收到这个数据的时候,它拿接收到的数据重新生成散列值,然后跟接收到的散列值进行比较,就可以判断这个数据有没有被人改过。
到此我们通过混合密码技术解决的传输数据的保密性,通过单项散列函数确定数据的一致性,但是还是没有解决 中间人截获篡改 的问题,因为散列函数中间人也可以重新生成一次,接下来我们就要讲数字签名了,他可以对消息发送者的真实性进行认证。
数字签名 (又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
它是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名是非对称密钥加密技术与数字摘要技术的应用。
说白了就是用用消息发送者的私钥进行签名就是数字签名
在数字签名中,任何人都可以使用公钥验证签名
在数字签名技术中,有以下2种行为:
生成签名 由消息的发送者完成,通过“签名密钥”生成
验证签名 由消息的接收者完成,通过“验证密钥”验证
数字签名由于是消息发送者的私钥进行签名,消息发送者的私钥只有他自己拥有,别人是没有的,从而我们通过私钥进行签名,别人通过消息发送者的公钥就能确定消息发送者的真实身份。
接下来我们看一下数字签名和公钥密码的对比:
上图Alice将要发送的消息用自己的私钥加密,发送给Bob,Bob用Alice的公钥解密消息,这里其实有一个不好的点,就是如果Alice如果发送的消息比较大,比如发1GB的视频文件,那这个签名过程就太慢了,本身非对称加密的速度就是比较慢的,
下面我们来看一个改进版的:
这里我们将要发送的消息先生成固定大小的散列值,然后再签名,这样签名文件就小的多了,然后我们将消息和签名一同发送该Bob,然后Bob再用公钥解密 对比等。
下面有关数字签名的一些点进行一下说明:
1 如果有人篡改了文件内容或者签名内容,会是什么结果? 结果是:签名验证失败,证明内容会篡改
2 数字签名不能保证机密性? 数字签名的作用不是为了保证机密性,仅仅是为了能够识别内容有没有被篡改
3 数字签名的作用
数字签名是能确定消息发送者,前提是你要确定你获取的公钥是确定是消息发送者的,如果你拿到的公钥是中间人伪造的,那么你就无法验证消息发送者的真实性了,就如下图:
[图片上传中...(image-b6d6e1-1614756605461-3)]
A问B要公钥,M从监听到了中间,B给A发的公钥被M拦截了并保存,M把他自己的公钥给了A,A以为这个公钥是B的,A用公钥加密发消息给B,M拦截然后用自己的私钥解密,修改消息内容后,然后用保存的公钥加密把消息发送给B,B解密消息。A,和B都以为是正常通信的,但消息确实不是那个消息了,那么如何确定公钥合法?也就是如何确定这个公钥就是B的呢?
接下来就是我们要讲的证书了,我们引入一个第三方权威机构来认正,说这个公钥就是B的。接下来我们来看一下。
CA是证书的签发机构,它是公钥基础设施(Public Key Infrastructure,PKI)的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。
CA 拥有一个证书(内含公钥和私钥)。网上的公众用户通过验证 CA 的签字从而信任 CA ,任何人都可以得到 CA 的证书(含公钥),用以验证它所签发的证书,密码学中的证书,全称叫公钥证书(Public-key Certificate,PKC),跟驾驶证类似 里面有姓名、邮箱等个人信息,以及此人的公钥; 并由认证机构(Certificate Authority,CA)施加数字签名。
图已经表示的很清楚了,消息发送者先向CA机构 注册自己的证书,那么任何拿到消息发送者的公钥都可以向CA进行验证公钥的真实性。
首先我们要知道iOS签名机制的作用是什么?
保证安装到用户手机上的APP都是经过Apple官方允许的
不管是真机调试,还是发布APP,开发者都需要经过一系列复杂的步骤:
大致如下图:
[图片上传中...(image-169a4f-1614756605461-0)]
总结:
1、.cerSigningRequest文件 : Mac公钥
2、.cer文件:利用Apple私钥(CA),对Mac公钥生成了数字签名
3、.mobileprovision : 利用Apple私钥,对【.cer证书 + devices + AppID + entitlements】进行数字签名