SSH HTTPS 公钥、秘钥、对称加密、非对称加密、 总结理解

DES:

Digital Encryption Standard. Obsolete standard.
单密钥算法,是信息的发送方采用密钥A进行数据加密,信息的接收方采用同一个密钥A进行数据解密.

单密钥算法是一个对称算法.
算法好在加/解速度快,密钥量短,采用对称加密

DSA:

Digital Signature Algorithm. based on discrete logarithms computation.
用于签名

RSA:

RSA 是一种非对称加解密算法。
RSA 与 DSA 都是非对称加密算法。其中RSA的安全性是基于极其困难的大整数的分解(两个素数的乘积);DSA 的安全性

是基于整数有限域离散对数难题。基本上可以认为相同密钥长度的 RSA 算法与 DSA 算法安全性相当。

公钥用于加密,它是向所有人公开的;私钥用于解密,只有密文的接收者持有。

DSA 用于签名,而 RSA 可用于签名和加密。

*refer: *

DES _百度百科

RSA,DSA等加解密算法介绍_越来越好_新浪博客

DSA与RSA的区别-ad007520-ITPUB博客

公钥、私钥 的解释

公钥 :用于向外发布,任何人都能获取,
私钥 :要自己保存,切勿给别人

一下两种情况经常有人弄混,一定要理解。

情况1:公钥用于【加密】, 私钥用于【解密】
如果加密密钥是公开的,这用于客户给私钥所有者上传加密的数据,这被称作为公开密钥加密(狭义)。
例如,网络银行的客户发给银行网站的账户操作的加密数据。HTTPS 等。

情况2:公钥用于【解密】,私钥用于【加密】
如果解密密钥是公开的,用私钥加密的信息,可以用公钥对其解密,用于客户验证持有私钥一方发布的数据或文件是完整准确的,接收者由此可知这条信息确实来自于拥有私钥的某人,这被称作数字签名,公钥的形式就是数字证书。例如,从网上下载的安装程序,一般都带有程序制作者的数字签名,可以证明该程序的确是该作者(公司)发布的而不是第三方伪造的且未被篡改过(身份认证/验证)。

refer:

公开密钥加密 - 维基百科,自由的百科全书

数字证书原理

签名:

加密后的hash值
这里主要解释一下签名,签名就是在信息的后面再加上一段内容,可以证明信息没有被修改过,怎么样可以达到这个效果呢?一般是对信息做一个hash计算得到一个hash值,注意,这个过程是不可逆的,也就是说无法通过hash值得出原来的信息内容。在把信息发送出去时,把这个hash值加密后做为一个签名和信息一起发出去

指纹:

指纹算法 即 一个hash算法 ,例如md5算法;
注意,为了保证安全,在证书的发布机构发布证书时,证书的指纹和指纹算法,都会加密后再和证书放到一起发布,以防有人修改指纹后伪造相应的数字证书。这里问题又来了,证书的指纹和指纹算法用什么加密呢?他们是用证书发布机构的私钥进行加密的。可以用证书发布机构的公钥对指纹和指纹算法解密,也就是说证书发布机构除了给别人发布证书外,他自己本身也有自己的证书。证书发布机构的证书是哪里来的呢???这个证书发布机构的数字证书(一般由他自己生成)在我们的操作系统刚安装好时(例如windows xp等操作系统),这些证书发布机构的数字证书就已经被微软(或者其它操作系统的开发机构)安装在操作系统中了,微软等公司会根据一些权威安全机构的评估选取一些信誉很好并且通过一定的安全认证的证书发布机构,把这些证书发布机构的证书默认就安装在操作系统里面了,并且设置为操作系统信任的数字证书。这些证书发布机构自己持有与他自己的数字证书对应的私钥,他会用这个私钥加密所有他发布的证书的指纹作为数字签名。

refer:
数字签名是什么?


公钥登陆 error

使用密码登录,每次都必须输入密码,非常麻烦。好在SSH还提供了公钥登录,可以省去输入密码的步骤。
所谓"公钥登录”,原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个:

  $ ssh-keygen

refer:

SSH原理与运用(一):远程登录 - 阮一峰的网络日志

localhost:客户端,
remotehost:服务器
密钥访问:localhost通过ssh-keygen来生成公钥密钥对,如果他想访问一个remotehost,则只需要将公钥添加到 remotehost的~/.ssh/authorized_keys中,接下来,当localhost通过ssh登录 [email protected]时,remotehost会生成一个随机数,通过autrorized_keys中的公钥们生成一系列数值发给 localhost,localhost会通过自己的私有密钥解密发过来的一系列数值(当然,只有用对应的公钥生成的数值才会被正常解密),随 后,localhost将解密后的数值发回去,remotehost若发现发回来的数值是原先产生的随机数时,便会允许该localhost访问。当然, 如果localhost生成的rsa密钥是需要密码的话,接下来还要输入该密码。

refer:

ssh 密钥访问


SSH基本原理和免密码登录

从客户端来看,SSH提供两种级别的安全验证:

第一种级别是基于口令的安全验证:

(1)远程主机收到用户的登录请求,把自己的公钥发给用户。

(2)用户使用这个公钥,将登录密码加密后,发送回来。

(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

缺点:如果有人冒充服务器,就会给你假服务器公钥,最后就能获得你回应的密码,这就是中间人攻击。

第二种级别是基于密匙的安全验证:

前提:客户端创建一对公钥+秘钥,同时将公钥放在服务器上。

1.客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证;

  1. 服务器收到请求之后,先在该服务器上寻找你的公钥,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用这个公钥加密一个【随机字符串】并把它发送给客户端软件;
    3.客户端软件收到【加密后的-随机字符串】之后,就可以用你的私人密匙解密,再把【随机字符串】发送给服务器

与第一种级别相比,第二种级别不需要在网络上传送口令。第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒,但是相比输入密码的方式来说10秒也不长。

refer:

SSH基本原理和免密码登录


公钥认证的原理

所谓的公钥认证,实际上是使用一对加密字符串,一个称为公钥(public key),任何人都可以看到其内容,用于加密;另一个称为密钥(private key),只有拥有者才能看到,用于解密。通过公钥加密过的密文使用密钥可以轻松解密,但根据公钥来猜测密钥却十分困难。

ssh 的公钥认证就是使用了这一特性。服务器和客户端都各自拥有自己的公钥和密钥。为了说明方便,以下将使用这些符号。

Ac 客户端公钥
Bc 客户端密钥
As 服务器公钥
Bs 服务器密钥
在认证之前,客户端需要通过某种方法将公钥 Ac 登录到服务器上。

认证过程分为两个步骤。

会话密钥(session key)生成
客户端请求连接服务器,服务器将 As 发送给客户端。
服务器生成会话ID(session id),设为 p,发送给客户端。
客户端生成会话密钥(session key),设为 q,并计算 r = p xor q。
客户端将 r 用 As 进行加密,结果发送给服务器。
服务器用 Bs 进行解密,获得 r。
服务器进行 r xor p 的运算,获得 q。
至此服务器和客户端都知道了会话密钥q,以后的传输都将被 q 加密。
认证
服务器生成随机数 x,并用 Ac 加密后生成结果 S(x),发送给客户端
客户端使用 Bc 解密 S(x) 得到 x
客户端计算 q + x 的 md5 值 n(q+x),q为上一步得到的会话密钥
服务器计算 q + x 的 md5 值 m(q+x)
客户端将 n(q+x) 发送给服务器
服务器比较 m(q+x) 和 n(q+x),两者相同则认证成功

refer:

ssh 公钥私钥认证原理


非对称加密

  • 服务器建立公钥: 每一次启动 sshd 服务时,该服务会主动去找 /etc/ssh/ssh_host* 的文件,若系统刚刚安装完成时,由于没有这些公钥,因此 sshd 会主动去计算出这些需要的公钥,同时也会计算出服务器自己需要的私钥
  • 客户端主动联机请求: 若客户端想要联机到 ssh 服务器,则需要使用适当的客户端程序来联机,包括 ssh, putty 等客户端程序连接
  • 服务器传送公钥给客户端: 接收到客户端的要求后,服务器便将第一个步骤取得的公钥传送给客户端使用 (此时应是明码传送,反正公钥本来就是给大家使用的)
  • 客户端记录并比对服务器的公钥数据及随机计算自己的公私钥: 若客户端第一次连接到此服务器,则会将服务器的公钥记录到客户端的用户家目录内的 ~/.ssh/known_hosts 。若是已经记录过该服务器的公钥,则客户端会去比对此次接收到的与之前的记录是否有差异。若接受此公钥, 则开始计算客户端自己的公私钥
  • 回传客户端的公钥到服务器端: 用户将自己的公钥传送给服务器。此时服务器:具有服务器的私钥与客户端的公钥,而客户端则是: 具有服务器的公钥以及客户端自己的私钥,你会看到,在此次联机的服务器与客户端的密钥系统 (公钥+私钥) 并不一样,所以才称为非对称加密系统
  • 开始双向加解密: (1)服务器到客户端:服务器传送数据时,拿用户的公钥加密后送出。客户端接收后,用自己的私钥解密 (2)客户端到服务器:客户端传送数据时,拿服务器的公钥加密后送出。服务器接收后,用服务器的私钥解密,这样就能保证通信安全

refer:

SSH 协议与OpenSSH详解 - Share your knowledge … - 51CTO技术博客


SSL/TLS协议

SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

SSL/TLS协议(HTTPS 也是这样的)的基本过程是这样的:

1.客户端生成【随机数1】,客户端(通常是浏览器)先向服务器发出加密通信的请求,发送【随机数1】,向服务器端索要公钥;
2.服务器收到客户端请求后,生成【随机数2】,向客户端发出回应,回应信息包括【随机数2】,服务器证书(包含公钥)
3.客户端收到后,验证服务器证书的有效性,取出公钥,生成【随机数3】,使用公钥加密【随机数3】,发给服务器。
4.服务器回应, 至此,服务器和客户端都有3个随机数,使用3个随机数生成这次的会话秘钥(即对称秘钥),二者开始使用对称加密通讯。服务器通知客户端:编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验(对称加密)。
5.之后二者将通过对称加密来通讯。

解释:为啥使用3个随机数。

不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性,三个随机数通过一个密钥导出器最终导出一个对称密钥,增加随机性

之前很多讲HTTPS原理的(包括下面的https),都只有1个随机数,为啥?因为毕竟是讲原理,并没有讲清细节;
简单来说,一开始使用的非对称加密,就是为了安全的传递对称秘钥,毕竟对称加密的速度快。

refer:

SSL/TLS协议运行机制的概述


https 非对称+对称

refer:

图解HTTPS 无网不剩

时间: 2024-08-01 22:45:28

SSH HTTPS 公钥、秘钥、对称加密、非对称加密、 总结理解的相关文章

Java对称与非对称加密解密,AES与RSA

加密技术可以分为对称与非对称两种. 对称加密,解密,即加密与解密用的是同一把秘钥,常用的对称加密技术有DES,AES等 而非对称技术,加密与解密用的是不同的秘钥,常用的非对称加密技术有RSA等 为什么要有非对称加密,解密技术呢 假设这样一种场景A要发送一段消息给B,但是又不想以明文发送,所以就需要对消息进行加密.如果采用对称加密技术,那么加密与解密用的是同一把秘钥.除非B事先就知道A的秘钥,并且保存好.这样才可以解密A发来的消息. 由于对称技术只有一把秘钥,所以秘钥的管理是一个很麻烦的问题.而非

对称加密+非对称加密,实现数据安全传输

一般金融类的产品,涉及前端和后端交互的时候,都会都严格的数据安全保证.防止黑客攻击,信息篡改. 加密方式有很多,总的来说,分为2种:对称和非对称.我们先来看一下,这两种加密方式分别是什么?他们有什么区别? 对称加密: 对称加密,即采用对称的密码编码技术,他的特点是,加密和解密使用相同的秘钥. 常见的对称加密算法有DES.3DES.Blowfish.IDEA.RC4.RC5.RC6和AES.对称加密算法使用起来简单快捷,密钥较短,且破译困难. 但是对称秘钥在使用过程中存在以下问题: 1.对称加密算

第十四章 调试及安全性(In .net4.5) 之 对称及非对称加密

1. 概述 本章内容包括:对称及非对称加密算法..net中的加密类.使用哈希操作.创建和管理签名认证.代码访问权限 和 加密字符串. 2. 主要内容 2.1 使用对称和非对称加密 ① 对称加密:使用同一个密钥来加密和解密数据,密钥的安全传输是一个很重要的问题. ② 非对称加密:使用两个关联的密钥(公钥和私钥),公钥公开,私钥保密.用公钥加密的信息可以用私钥解密,反之亦然. ③ 对称加密 速度快,适用大数据量情况.使用两种加密算法的组合方式,可以实现大数据的加密传输. *密钥之外的另一种加密方式是

对称与非对称加密;SSL;HTTPS;AJP

1.对称加密就是加密与解密的时候都是用一个密码 2.非对称加密,有一对密码A,B:用A加密就得用B解密,相对的用B加密就得用A解密 3.公钥与私钥,这一对密码,随便拿一个公布出去,那个就是公钥,剩下一个是私钥. 4.应用1:我想给一个人发信息,我就去拿他公布出来的公钥加密,加密后就只能用私钥来解密,由于私钥在他手中,就能很好在传输中保密. 5.应用2:我收到一个信息,说是银行发来的账单,银行为了不被别人冒牌货发假信息给客户,事先给客户说好,我给你发信息是我的私钥加密了的,所以客户到了信息就要去拿

git乌龟http/https以及ssh clone的秘钥配置永久免密码登录设置

1.安装 安装Git 安装TortoiseGit 乌龟客户端 首先下载安装一个git客户端这个就不多说了基本就是next一直到底 安装后首次新建一个项目project在git服务器上 2.配置 1.注册用户,让git知道你是谁,在于提交代码的时候,知道是哪个家伙提交的!git config --global user.name  "chen1932490299"    用户名是git服务器上配置的谁填谁git config --global user.email "19324

单向加密 对称加密 非对称加密

单向加密: 单向加密又称为不可逆加密算法,在加密过程中不使用密钥,明文由系统加密处理成密文,密文无法解密.一般适合于验证,在验证过程中,重新输入明文,并经过同样的加密算法处理,得到相同的密文并被系统重新认证.广泛使用于口令加密. 一:base64 常见于邮件.http加密,截取http信息,你就会发现登录操作的用户名.密码字段通过BASE64加密的. 主要就是BASE64Encoder.BASE64Decoder两个类 BASE加密后产生的字节位数是8的倍数,如果不够位数以=符号填充 二:md5

个人理解c#对称加密 非对称加密 散列算法的应用场景

c#类库默认实现了一系列加密算法在System.Security.Cryptography; 命名空间下 对称加密 通过同一密匙进行加密和解密.往往应用在内部数据传输情况下.比如公司a程序 和B程序 .a程序要给B程序发送数据 但是为了防止明文发送 数据被窃取.那么我就定了一个协议传输的数据的byte字节都统一+1  而接收数据的情况下将Byte字节统一-1 然后就能获得正确的 数据(当然这个是一个简单的加密) ,真正应用的加密肯定比这个复杂很多 非对称加密 传输数据的双方有各自的公钥和私钥  

Android Keystore 对称-非对称加密

Android 提供了 KeyStore 等可以长期存储和检索加密密钥的机制,Android KeyStore 系统特别适合于存储加密密钥. “AndroidKeyStore” 是 KeyStore 的一个子集,存进 AndroidKeyStore 的 key 将受到签名保护,并且这些 key 是存在系统里的,而不是在 App 的 data 目录下,依托于硬件的 KeyChain 存储,可以做到 private key 一旦存入就无法取出, 每个 App 自己创建的 key,别的应用是访问不到的

Linux ssh服务开启秘钥和密码认证

问题描述: 实现Linux秘钥和密码同时认证 解决方案: vim /etc/ssh/sshd_config 基本参数: PermitRootLogin yes #允许root认证登录 PasswordAuthentication yes #允许密码认证 RSAAuthentication yes #秘钥认证 PubkeyAuthentication yes 详细参数列表 [[email protected] ~]# cat /etc/ssh/sshd_config # $OpenBSD: ssh