公钥算法

公钥,私钥,数字签名,数字证书的相互关系

て烟熏妆下的殇ゞ 提交于 2020-01-25 14:21:02
我们经常听到数字证书,数字签名这些词。 这些证书,签名到底是什么? 他们又起到什么样的作用? 其原理是什么? 了解这些我们需要先了解加密方式,以及什么是公钥?什么是私钥? 1. 加密方式 先解释一下2种常用的加密方式。 ◆ 对称加密 加密的传统方法是对称加密。发出讯息者用一把钥匙对讯息加密。 接收讯息者需用这把钥匙将加密了的讯息解密。 这把钥匙必须以一种其他人没有机会得到它的方式给予接收讯息者。 如果其他人得到了这把钥匙,这种加密方式就没用了。 ◆ 非对称加密算法 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey) 公开密钥与私有密钥是一对,可以相互加密和解密。 如果用公钥对数据进行加密,只有用对应的密钥才能解密。 如果用密钥对数据进行加密,那么只有用对应的公钥才能解密。 因为非对称加密算法安全性比较高,所以下面的数字签名,数字证书都是用了非对称加密算法。 2. 数字签名digital signature 在现实生活中,签名是为了表示这是签名者写的。计算机中,数字签名也是相同的含义。 举一个例子如果A,B两台计算机相互通讯: A计算机传输给B计算机信息的时候,A计算机会在消息的最后写上去自己的签名,以代表这些信息是A计算机的。 B计算机接到消息后,先看签名是不是A计算机判断不是别人冒充A计算机发送不安全或是无效的信息(有效性)。 除此之外

【转帖】HTTPS 详解一:附带最精美详尽的 HTTPS 原理图

孤街醉人 提交于 2020-01-25 00:50:01
HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 https://segmentfault.com/a/1190000021494676 前言 作为一个有追求的程序员,了解行业发展趋势和扩充自己的计算机知识储备都是很有必要的,特别是一些计算机基础方面的内容,就比如本篇文章要讲的计算机网络方面的知识。本文将为大家详细梳理一下 HTTPS 的实现原理。 近年来,随着用户和互联网企业安全意识的提高和 HTTPS 成本的下降,HTTPS 已经越来越普及。很多互联网巨头也在力推 HTTPS,比如谷歌的 Chrome 浏览器在访问 HTTP 网站时会在地址栏显示不安全的提醒,微信要求所有的小程序必须使用 HTTPS 传输协议,苹果也要求所有在 App Store 上架的应用必须采用 HTTPS ,国内外的大部分主流网站也都已迁移至 HTTPS,可见 HTTPS 全面取代 HTTP 只是时间问题。 说了这么多,究竟什么是 HTTPS,它与 HTTP 相比有什么优缺点?其底层原理又是怎么实现的呢?下面就为你一一解答,先来看一下 HTTP 的弊端吧。 1、HTTP 的最大弊端——不安全 HTTP 之所以被 HTTPS 取代,最大的原因就是不安全,至于为什么不安全,看了下面这张图就一目了然了。 图1. HTTP数据传输过程 由图可见,HTTP 在传输数据的过程中,所有的数据都是明文传输

移动通信安全——移动通信系统的安全基础

巧了我就是萌 提交于 2020-01-24 09:54:36
加密算法 1、加密的两种方法:   对称(私钥)密码体制   非对称(公钥)密码体制 2、对称密码体制   加密密钥与解密密钥相同   保密强度高,但密钥管理难且可抵赖   从加密模式来看,分为两类:   a、序列密码   有限状态机产生伪随机序列——>使用该序列逐比特加密信息流   b、分组密码   明文按照固定长度分组——>用固定长度密钥单独加密每个分组   分组算法:DES、3DES、IDEA、IDEA、Skip-jack、Safer-64、LOK189、Shark 3、非对称加密体制   加密密钥(公开密钥)与解密密钥(专用密钥)不同   基本过程:A生成一对密钥——>公开其中的公开密钥PK——>C使用PK加密并将密文发送给A——>A用其中的专用密钥ZK解密   非对称密码体制中的每个用户都有一对选定的密钥   非对称密码体制,密钥管理简单,不可抵赖,但所需密钥长度较长,处理速度较慢 WPKI    1、PKI:公钥基础设施   PKI系统:提供公钥加密和数字签名的系统   数字证书组成:用户身份,用户公钥,认证中心的数字签名 2、PKI系统的组成:认证中心CA、注册中心RA、证书库、客户端软件   a、认证中心   验证用户身份——>对含有用户身份与公钥的数据结构数字签名,捆绑用户身份和密钥——>生成公钥证书   根证书:直接被用户终端信任的CA  

20189221 2018-2019-2 《密码与安全新技术专题》第五周作业

…衆ロ難τιáo~ 提交于 2020-01-23 05:38:30
20189221 2018-2019-2 《密码与安全新技术专题》第五周作业 课程:《密码与安全新技术专题》 班级: 201892 姓名: 郭开世 学号:20189221 上课教师:谢四江 上课日期:2019年4月23日 必修/选修: 选修 1.本次讲座的学习总结 讲座主题:区块链技术 比特币 比特币(BitCoin)是一种由开源的P2P软件产生的电子币,数字币,是一种网络虚拟资产。比特币也被意为“比特金”。比特币基于一套密码编码、通过复杂算法产生,这一规则不受任何个人或组织干扰,去中心化;任何人都可以下载并运行比特币客户端而参与制造比特币;比特币利用电子签名的方式来实现流通,通过P2P分布式网络来核查重复消费。每一块比特币的产生、消费都会通过P2P分布式网络记录并告知全网,不存在伪造的可能。 比特币的特点: ​ 1.数字货币 ​ 2.不依托于任何国家或组织而利用计算机技术独立发行。 ​ 3.通过P2P分布式技术实现,无中心点。 ​ 4.所有人均可自由的参与。 ​ 5.总量有限,不可再生。 ​ 6.本身机制开源,可以被山寨。 面临的一些疑问: ​ 1.较大的政策风险,国家组织是否会承认? ​ 目前德国是唯一承认比特币具有合法货币地位的国家。 ​ 中国明令禁止 ​ 2.安全性如何得到保证,被盗了谁来给你找回? ​ 11年MyBitcion遭遇黑客攻击,7.8万比特币至今下落不明。 ​

Java加解密之RSA

耗尽温柔 提交于 2020-01-23 03:19:21
Java加解密之RSA RSA加解密需要有公钥,私钥;可以使用公钥加密,私钥解密;也可以使用私钥加密,公钥解密。私钥加密相同的数据密文相同,公钥加密相同的数据密文不同。 import org . apache . commons . codec . binary . Base64 ; import org . slf4j . Logger ; import org . slf4j . LoggerFactory ; import javax . crypto . BadPaddingException ; import javax . crypto . Cipher ; import javax . crypto . IllegalBlockSizeException ; import javax . crypto . NoSuchPaddingException ; import java . security . * ; import java . security . interfaces . RSAPrivateKey ; import java . security . interfaces . RSAPublicKey ; import java . security . spec . InvalidKeySpecException ; import java .

总结HTTPS握手层和加密层

泪湿孤枕 提交于 2020-01-20 19:27:21
前面说过,TLS/SSL协议可以和应用层协议结合,例如HTTP,SMTP和FTP等。提供数据完整性和机密性TLS/SSL协议建立在TCP或UDP之上,应用层协议之下,任何应用层协议使用了TLS,都要先把数据经过TLS/SSL处理。客户端浏览器连接服务器的443端口,发送HTTP数据到TLS/SSL协议,再到传输层TCP处。TLS协议部分有握手层和加密层两部分,握手层在上,加密层在下,握手层负责完成密码套件,也就是使用的加密算法,密钥参数生成和交换,发送证书等,最后完成密钥协商得到预备主密钥,预备主密钥用过密钥衍生算法得到主密钥,之后就可以把这它交给下面的加密层,完成数据加密和解密。加密层的功能顾名思义,在拿到握手层提供的主密钥后,对HTTP数据提供完整性和机密性保证。 握手层和加密层流程 在握手层,负责交换随机数,密钥套件和密钥协商等,无论是RSA还是DH方式,首先都是客户端发送自己支持的密码套件给服务器,服务器从中选择一个密钥套件,完成密码套件的协商,然后服务器端发送自己的证书给客户端进行身份验证,客户端完成身份验证后,可以开始密钥协商。RSA密钥协商,客户端直接把加密后的预备主密钥发送给服务器端,DH密钥协商则先由服务器端发送DH参数和DH公钥给客户端,客户端根据DH参数生成自己的密钥对,再把客户端DH公钥发送给服务器端,完成密钥协商。接下来就可以在通信中进行数据的加密和解密。

https、公钥,私钥,数字证书

我是研究僧i 提交于 2020-01-20 10:42:14
前言 https是http与ssl的结合,为了解决http明文传输导致信息泄露的问题。ssl通过公钥和私钥保证客户端和服务器之间的通讯加密,由权威机构办法的数字证书杜绝了中间人攻击的可能。 http和ssl http是处于应用层的传输协议,ssl是处于与TCP同层的传输层和应用层之间的协议,由于http使用明文传输,就会导致数据在传输过程中泄露,为此将http和ssl两者结合后得到https。 使用公钥和私钥进行数据传输 当客户端发送请求到服务端的时候,将会收到服务端发送的公钥,服务器有对应的私钥; 服务端与客户端进行通讯的时候,使用私钥将数据进行加密传输,客户端使用公钥进行解密后获得内容,而客户端发送数据到服务端的时候会使用公钥将内容进行加密,服务器接收后使用私钥解密。 但是当一开始服务端发送的公钥到客户端的过程中有可能被第三方劫持,然后第三方自己伪造一对密钥,将公钥发送给客户端,当服务器发送数据给客户端的时候,中间人将信息进行劫持,用一开始劫持的公钥进行解密后,然后使用自己的私钥将数据加密发送给客户端,而客户端收到后使用公钥解密,反过来亦是如此,整个过程中间人是透明的,但信息泄露却不得而知。 数字证书 为了防止中间人攻击,整个传输过程中亟需解决的是保证客户端收到的公钥是服务端发送的,为此提出了 数字证书 ,数字证书是由权威的CA机构给服务端进行颁发

加密与安全

泪湿孤枕 提交于 2020-01-19 17:49:08
一, URL 编码 为什么要使用 URL 编码? 我们都知道Http协议中参数的传输是 "key=value" 这种简直对形式的,如果要传多个参数就需要用 “&” 符号对键值对进行分割。如 "?name1=value1&name2=value2" ,这样在服务端在收到这种字符串的时候,会用 “&” 分割出每一个参数,然后再用 “=” 来分割出参数值。 现在有这样一个问题,如果我的参数值中就包含=或&这种特殊字符的时候该怎么办。 比如说 “name1=value1” ,其中value1的值是 “va&lu=e1” 字符串,那么实际在传输过程中就会变成这样 “name1=va&lu=e1” 。我们的本意是就只有一个键值对,但是服务端会解析成两个键值对,这样就产生了奇异。 如何解决上述问题带来的歧义呢?解决的办法就是对参数进行URL编码? URL编码只是简单的在特殊字符的各个字节前加上%,例如,我们对上述会产生奇异的字符进行URL编码后结果: “name1=va%26lu%3D” ,这样服务端会把紧跟在“%”后的字节当成普通的字节,就是不会把它当成各个参数或键值对的分隔符。 类似于这种 实际操作 public static void main(String[] args) { //url编码 String str="测试"; String urlStr=URLEncoder.encode

SFTP 知识合集

こ雲淡風輕ζ 提交于 2020-01-19 00:40:33
SFTP协议的工作原理 AS2(Applicability Statement 2)协议是一种应用广泛的企业间B2B通信协议,它被设计用来安全的交换EDI信息,以使交易的双方确保信息交换可靠、安全的完成。AS2协议是基于HTTP/S来进行数据交换。通过使用加密和数据签名传输将数据封装为S/MIME(安全多用途互联网邮件扩展协议)的数据,并且使用MDM(消息处理通知)确保数据在网络上能够安全可靠地传输。下面为AS2通信信息传递的流程图: AS2通信流程图(图片来源:http://www.edinet.cn/EDITransmission/WhatIsAS2.html) 这东西看起来很高端,也很安全,并且通过HTTP/S来传输数据,这个很符合我们的口味。但是,它维护的成本非常高,防火墙设置,AS2配置定期维护变更,传输文件名称长度限制在45bytes以内等等,这一系列配置与限制,不得不让我对这一复杂的协议望而却步。并且银行建议我们去购买成熟的AS2商业套件来与他们对接。这条路径还仅仅只是为上传付款文件到银行而铺设,我们要获取付款确认文件和MT940对账单还是需要通过FTP之类的方式传递给我们。那么,通过这个方案进行直连就太不划算了。 既然AS2不划算,那我们自然就会询问银行是否还有其它的直连方案。银行便给我们SFTP和FTPS这两种方案供我们选择。后来,在聊天的过程中

JAVA——RSA加密【X509EncodedKeySpec、PKCS8EncodedKeySpec、RSAPublicKeySpec、RSAPrivateKeySpec】

倖福魔咒の 提交于 2020-01-16 06:27:11
基本概念 RSA加密算法 :SA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。 RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用。 解密者拥有私钥,并且将由私钥计算生成的公钥发布给加密者。加密都使用公钥进行加密,并将密文发送到解密者,解密者用私钥解密将密文解码为明文。 API https://docs.oracle.com/javase/7/docs/api/index.html X509EncodedKeySpec : 该类表示公钥的ASN.1编码,根据ASN.1类型 SubjectPublicKeyInfo 进行编码。 SubjectPublicKeyInfo 语法在X.509标准中定义如下: SubjectPublicKeyInfo ::= SEQUENCE { algorithm