Cosmos-SDK介绍
aditosoftware/nodepki: NodePKI is a simple NodeJS based PKI manager for small corporate environments. (github.com)](https://github.com/WillZhuang/nodepki) NodePKI 是一个简单的基于 NodeJS 的 PKI 管理器,适用于小型企业环境。
1 | git clone https://github.com/aditosoftware/nodepki.git |
配置文件的例子有 config.yml.default,将其内容copy至 NodePKI/data/config/config.yml。修改 config.yml 根据你的配置。config.yml 中的密码将用于创建PKI。
1 | node server.js |
启动后,CA 文件将在 data/mypki 文件夹内创建。
1 | node nodepkictl useradd --username user1 --password user1password |
1 | node nodepkictl userdel --username user1 |
1 | curl -H "Content-type: application/json" -d '{ "data": { "state":"all" }, "auth": { "username":"thomas", "password":"test" } }' http://localhost:8080/api/v1/certificates/list |
1 | curl -H "Content-type: application/json" -d '{ "data": { "applicant":"Thomas", "csr":"---CERTIFICATE SIGNING REQUEST---", "lifetime":365, "type":"server" }, "auth": { "username":"thomas", "password":"test" } }' http://localhost:8080/api/v1/certificate/request |
NodePKI 服务器的简单命令行客户端。
1 | git clone https://github.com/ThomasLeister/nodepki-client.git |
Copy config.default.yml to config/config.yml and set the settings according to your environment.
1 | node client help |
Create new key + certificate from scratch and store both in out/ directory. Lifetime: 7 days.
1 | node client request --lifetime 7 --out out/ |
Create new key + certificate from scratch, add intermediate cert to cert and store in out/ directory
1 | node client request --out out/ --fullchain |
Lifetime defaults to cert_lifetime_default setting in config.yml
Create a new client certificate:
1 | node client request --type client --out out/ |
获取发布的证书
1 | node client list --state all |
可用的状态 Valid states:
1 | node client list --state valid |
… and store certificate to out/cert.pem
1 | node client get --serialnumber 324786EA --out out/cert.pem |
1 | node client revoke --cert cert.pem |
Get root certificate:
1 | node client getcacert --ca root |
Write root certificate to file:
1 | node client getcacert --ca root --out out/root.cert.pem |
Get intermediate certificate:
1 | node client getcacert --ca intermediate |
Get intermediate certificate + root certificate (=cert chain) and write to file:
1 | node client getcacert --ca intermediate --chain --out out/ca-chain.cert.pem |
虽然同态加密即使现在听起来也很陌生,但是其实这个概念来自 1978 年,由 RSA 算法的发明者的 R 和 A 以及 Dertouzos 提出。具体的定义如下:
A way to delegate processing of your data, without giving away access to it.
翻译成人话就是传统的加密方法和数据处理方法是互斥的,比如我需要计算两个数字的和(1 和 2),如果加密了之后,就无法对密文进行计算;如果想要进行计算,就必须知道这两个数字是 1 和 2。如果数据拥有方和计算方是同一方,那么知道 1 和 2 没啥问题;但如果数据拥有方和计算方并非同一方,并且数据拥有方还不想让计算方知道这两个数字是 1 和 2,这个时候就是同态加密发挥作用的时候了。
同态加密将数据的处理和数据本身解耦了:计算方拿到的是加密之后的密文,但是依然可以相加,相加之后把结果告诉数据拥有方,最终数据拥有方解密就可以知道最终的计算结果。
同态加密的这个特点使得云服务厂商非常在意,因为这一举解决了用户担心云服务厂商窃取数据的担心(因为加密了除了计算没法做其他事情),并且因为加密计算本身耗费更多计算资源,还可以变相提高营收。
总结一下:同态加密使得数据可以在加密的状态下进行计算,至于支持什么计算,如何进行计算,我们接下来继续讲。
EncData = Encrypt(Key, Data)F()Evaluate(F(), EncData) = Encrypt(Key, F(Data)),记为 ProEncDataProEncData 发回给到我F(Data) = Decrypt(Key, ProEncData),也就是最终结果在以上六个步骤中,至少有四个函数是必须的:
F(),是唯一由云平台运行的函数根据支持的 F() 的不同,同态加密分成了两类:
F() 都可以,只要这个算法能够被计算机实现即可。不过这个计算开销非常大,目前暂无实际应用。F() (比如只支持加法/乘法,并且只能执行有限次数)。这个方案有比较大的限制,但也因此计算开销较小,已经可以在实际中使用接下来我们会详细看看 Paillier 算法和 RSA 算法,对加法同态和乘法同态有更加深入的理解。
总共有如下几个步骤:
参考项目:
https://github.com/apple/swift-homomorphic-encryption
苹果公司表示,它正在使用同态加密技术进行实时来电者身份验证查询,用以支持来电者识别和垃圾电话拦截服务。这项技术允许苹果通过向服务器发送加密的查询,请求获取电话号码的相关信息,而服务器无需知道或存储电话号码。
苹果公司表示,典型的同态加密工作流可能是这样的:
https://github.com/homenc/HElib
IBM 提供的 HElib目前不再进行积极的开发,尽管还有一些未解决的问题,它现在处于“维护模式”,主要的工作是修复安全漏洞。
https://github.com/microsoft/SEAL
至于微软的 SEAL 库,自 2018 年以来也都没有与发布相关的新闻,尽管其 GitHub 代码库偶尔还会有一些更新。
项目地址:data61/MP-SPDZ: Versatile framework for multi-party computation (github.com)
1)在ubuntu环境中,安装依赖包。
1 | apt-get install automake build-essential git libboost-dev libboost-thread-dev libntl-dev libsodium-dev libssl-dev libtool m4 python3 texinfo yasm |
2)使用git下载项目源码,注意不是二进制的release文件。
3)在项目目录中,编译代码。
1 | make -j 8 tldr |
4)试用并执行 the tutorial 教程,他是一个双方的、对恶意安全的教程。
1 | ➜ MP-SPDZ git:(master) ./compile.py tutorial |