看一个小时候经常在《趣味数学》这类书里的一个数学小魔术:
让对方任意想一个3位数,并把这个数和91相乘,然后告诉我积的最后三位数,我就可以猜出对方想的是什么数字啦!比如对方想的是123,那么对方就计算出123 * 91等于11193,并把结果的末三位193告诉我。看起来,这么做似乎损失了不少信息,让我没法反推出原来的数。不过,我仍然有办法:只需要把对方告诉我的结果再乘以11,乘积的末三位就是对方刚开始想的数了。可以验证一下,193 * 11 = 2123,末三位正是对方所想的秘密数字!
其实道理很简单,91乘以11等于1001,而任何一个三位数乘以1001后,末三位显然都不变(例如123乘以1001就等于123123)。
知道原理后,我们可以构造一个定义域和值域更大的加密解密系统。比方说,任意一个数乘以400000001后,末8位都不变,而400000001 = 19801 * 20201,于是你来乘以19801,我来乘以20201,又一个加密解密不对称的系统就构造好了。
甚至可以构造得更大一些:4000000000000000000000000000001 = 1199481995446957 * 3334772856269093,这样我们就成功构造了一个30位的加密系统。
这是一件非常coooooooool的事情,任何人都可以按照我公布的方法加密一个数,但是只有我才知道怎么把所得的密文变回去。
其安全性就建立在算乘积非常容易,但是要把4000000000000000000000000000001分解成后面两个数相乘,在没有计算机的时代几乎不可能成功!但如果仅仅按照上面的思路,如果对方知道原理,知道我要构造出带很多0的数,根据19801和8位算法这2个条件非常容易穷举出400000001这个目标值。
要解决这个问题,真实世界就不是使用乘法了,比如RSA算法使用的是指数和取模运算,但本质上就是上面这套思想。
如何用通俗易懂的话来解释非对称加密? - 知乎 (zhihu.com)
作者:永安在线反欺诈
链接:https://www.zhihu.com/question/33645891/answer/192604856
RSA 非对称加密原理,通俗易懂,快速掌握_q469587851的博客-CSDN博客
可以采用私钥进行加密,采用公钥进行解密(比如CA用自己的私钥加密别人的公钥 这就是签名,因为私钥就是CA的独家秘方)。秘钥对的拥有者采用私钥对一段数据进行加密,然后公布密文,原文和公钥,任何人都可以使用公钥解密密文,然后核对原文和密文是否一致。由于私钥是不公开的,只有拥有者才能采用私钥对数据加密,所以这种方式可以用于证明发布这条消息的用户拥有消息中的公钥对应的私钥,这就是数字签名的基本原理。在数字证书,区块链,比特币中就采用了这种方法来验证用户身份。
数字证书就是使用证书颁发机构(Issuer)的私钥对证书内容(证书拥有者的公钥和身份信息)进行数字签名
参考 https://zhaohuabing.com/post/2020-03-19-pki/ 数字证书原理
首先如果要想有一个CA机构签发的证书的话,会自己生成私钥,然后通过私钥证书签名请求(CSR)让CA去签名,这个证书签名中会包含服务端的一些信息(比如common name、organization等)还有公钥。
CA收到证书签名请求(CSR)之后,会生成一个证书,证书内容包括申请者的信息,CA的信息以及申请者公钥,然后会用CA的私钥进行加密,然后把证书给服务端。
当客户端想要和服务端进行SSL连接的时候要先要发个申请连接的请求。
然后服务端就会把通过CA签发的证书给客户端。
客户端用CA的证书去验证服务端的证书是否正确(一般CA证书会内置在操作系统中,这也是为什么第0步骤会用虚线表示)
客户端验证通过后会用证书中的公钥对数据进行加密保证安全。
注:
-
这里只是说的单向SSL过程,如果是双向的话客户端也要有自己的证书
-
验证证书通过后之后,客户端和服务端会协商一个对称加密进行通信,因为非对称加密太慢了。(因为对称加密的过程对本文没影响,所以有兴趣的读者可以自行查找资料或者和我探讨交流)
-
这里为了照顾大多数读者,没有细致的深入,比如CA怎么签发的服务端证书。考虑到本文主要讲k8s的,不是讲加密的,这里没有重点写出
附加几个生成密钥和查看的命令:
-
生成私钥:openssl genrsa -out helios.key 1024
-
通过私钥生成公钥:openssl rsa -in helios.key -pubout -out helios.pem
-
生成证书签名请求:openssl req -key helios.key -new -out helios.req
-
CA签发证书:openssl x509 -req -in helios.req -CA cacertificate.pem -CAkey caprivate.key -out helioscertificate.pem
-
查看证书签名请求文件内容:openssl req -in helios.req -noout -text
参考 如何用 OpenSSL 创建自签名证书 | Azure Docs
PKI,全称公钥基础设施,是使用非对称加密理论,提供数字签名、加密、数字证书等服务
的体系,一般包括权威认证机构(CA)、数字证书库、密钥备份及恢复系统、证书作废系统、应
用接口(API)等。
围绕PKI体系,建立了一些权威的、公益的机构。它们提供数字证书库、密钥备份及恢复系
统、证书作废系统、应用接口等具体的服务。比如,企业的数字证书,需要向认证机构申请,以
确保数字证书的安全