工程师的灵魂拷问:你的密钥安全吗?

阿里妹导读:密钥管理是密码学应用的核心问题之一。任何涉及加密/签名的应用,无论算法本身机制多么安全,最终都会受到灵魂拷问:你密钥存在哪儿?本文实现了一种安全的密钥管理方案,基于安全多方计算技术,避免了客户端、服务器端内存中的密钥泄露风险,并已经在阿里集团内的密钥管理系统上线。

背景介绍:密钥管理

提问:你密钥存在哪儿?

对这一问的回答基本可概括为2类:

a. 本地加解密:密钥保存在某些介质(如配置文件、数据库,也可以是某个远程服务器)中,用户在需要进行加密/签名时,从这些介质拉取密钥(可能拉取的只是密钥密文,需要再解密出密钥明文),然后本地进行加密/签名。

b. 服务器加解密:用户在需要进行加密/签名时,把数据请求发给某个服务器,服务器代为完成加密/签名工作,将加密/签名结果发回用户。

一般的密钥管理系统都可归到这两类模式,但是他们都存在各自的问题:

  1. 前者由于密钥是被拉到了用户本地,暴露在用户内存中,而用户本机的安全性是无法做任何假设的,可能存在各种漏洞/木马等,因此密钥面临着各类泄露风险;在客户端引入 TEE 可以提升这个安全门槛,但是需要配置额外的硬件,而且没有100%杜绝泄露风险(如侧信道等);
  2. 后者的密钥是完全交给了服务器,万一服务器存在漏洞/服务器被入侵/服务器管理员作恶,那么用户隐私便在服务器面前一览无余。

可能有些同学觉得这2类风险不够高,但是对于高价值数据,这些风险是不可忽视的。举个例子,假设你是中本聪,那么你的比特币创世块地址对应的私钥放哪才能不忘掉,同时不泄露呢?是不是好像这两种方法都无法满足需求了?

基于安全多方计算的密钥管理(MPC KMS),也称门限签名/门限加密,即是为了解决这一对矛盾。简而言之,MPC KMS 将用户密钥分为 M 份"碎片"(例如 M=2,密钥是100,可以拆成两份30和70),存储在 M 个不同的服务器中(例如一份存在A云服务商,一份存在B云服务商),任何一个服务器都无法独立根据自己的"碎片"恢复出用户密钥原文。当用户需要进行加密/签名时,则在这 M 个服务器之间运行一个 MPC 协议,产生加密/签名的结果,且整个过程中不需要复原用户密钥。

如果最少只需要 n 个服务器参与即可完成协议,则称之为 n of M 的门限签名/加密。

可见,在 MPC KMS 中,上述两种风险均可以得到有效的规避:首先,用户本地环境的安全问题不会导致密钥泄露;其次,即使某个服务器出问题,攻击者也无法得到用户的密钥,必须同时攻陷 n 个服务器,或是 n 个服务器管理员一起合谋(如果我们把服务器部署在多个独立的云服务系统上,这种同时出问题的概率几乎可以忽略)。

MPC KMS 这种去中心化密钥管理的特点和区块链的共识机制具有非常好的兼容性:除了直接用于保管用户私钥、节点密钥之外,用户还可以把私钥托管分成 M 片,托管在区块链的 M 个节点,然后设定仅当满足一定门限的节点(例如1/4的节点)产生共识时才能动用他的某笔数字货币财产;或是设定某个软件包的发布必须经过一定门限的节点签名等等。

安全多方计算 MPC 介绍

安全多方计算( Secure Multi-Party Computation,MPC)在80年代由姚期智院士提出。安全多方计算协议允许多个数据所有者进行数据协同计算,输出计算结果,并保证任何一方均无法得到除应得的计算结果之外的其他任何信息

这里的黑色加粗字体的文字是格外需要注意的:不仅仅是无法获取原始数据,而是无法获得其他任何信息。以百万富翁问题为例:两个百万富翁比谁的钱数更多,最后双方获得的唯一信息只能是“大于、等于或小于”;只要泄露了任何的其他额外信息(譬如对方钱数的最高位是1还是2),无论这个额外信息多么少,都不能算 MPC。

MPC 还有很多潜在应用场景,如基于融合数据的联合风控、联合广告推荐等,它能够真正实现“数据可用不可见”,在这个数据为王的时代有着美妙的前景。

安全多方计算+密钥管理MPC KMS介绍

技术架构

MPC KMS 即是安全多方计算 MPC 的一种特殊场景:各方分别持有密钥的一部分,协同计算的目的是加解密/签名,同时除了加解密/签名结果之外,不泄露任何其他信息。

我们研读了多篇最新论文[1,2,3],在这些论文的理论基础之上,实现了安全两方 ECDSA 签名系统。系统的粗粒度交互过程如下,详细算法可以参阅论文。

1.密钥生成:用户发起生成请求,两台服务器 A 和 B 分别各自独立的产生随机数 a 和随机数 b,a+b 即是签名时使用的私钥。

2.签名:用户首先从 A 服务器拉取 a,然后调用 B 的服务,把需要签名的消息message 和 message、a 的加密计算结果发送给 B,和 B 之间运行一个安全两方签名协议,得到最终的签名值。在整个过程中,私钥a+b没有在任何一方的内存中复原,任何一方都无法了解到私钥 a+b 的内容。

操作流程

最终系统暴露给用户的是两个接口 getPK() 和 sign(),接口以阿里内部常用的HSF(High-speed Service Framework) 方式提供,接入非常方便。

Step 1. 用户首先在密钥管理服务器上新建一个密钥,后台的两台服务器会自动的产生各自的密钥分量;

Step 2.用户调用 getPK() 获取该密钥对应的公钥;

Step 3.用户在密钥管理服务器上新建一个 SHA256WithECDSA 类型的公钥,选择手工输入,输入 Step 2得到的内容;

Step 4.用户此后就可以通过 sign() 来调用安全两方签名,通过密钥管理服务器提供的ECDSA verifier 函数,输入公钥来验证签名的正确性了。

Step 5. 这下安全性超有保障,连管理员都得两个服务器的管理员一起码代码才能知道你的私钥到底是啥了!


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优化算法2D可视化的补充

4. 分析上图,说明原理(选做) 1、为什么SGD会走“之字形”?其它算法为什么会比较平滑? 之所以会走"之字形",是因为它在每次更新参数时只考虑当前的样本梯度。这导致参数更新非常不稳定&#xff0c…

TortoiseGit 本地仓库和远程仓库建立联系_入门试炼_02

TortoiseGit 简介: TortoiseGit 简称 tgit, 中文名海龟Git。TortoiseGit是一个开放的GIT版本控制系统的源客户端。 文章目录一、前提准备1.1. 生成秘钥和公钥1.2. 把 SSH Key 填到Git 服务器的配置中一、前提准备 声明:此处介绍通过SSH URL方式传输&…

来自 Spring Cloud 官方的消息,Spring Cloud Alibaba 即将毕业

2019 年 7 月 24 日晚,Spring Cloud 官方发布公告: 仓库迁移是官方决定Spring Cloud Alibaba 即将毕业 根据官方最新的发版规则,我们会把孵化器中的 Spring Cloud Alibaba 仓库迁移回 Alibaba 官方仓库,进行正式的毕业发布&#…

TortoiseGit 克隆_入门试炼_03

文章目录一、 Git克隆1.1. 右击选择Git克隆1.2. 输入URL1.3. 提示输入密码一、 Git克隆 1.1. 右击选择Git克隆 在本地文件夹的空白位置处,右击鼠标,在菜单中选择【Git克隆】: 1.2. 输入URL 标签说明URL是git项目地址,简言之后…

5分钟在PAI算法市场发布自定义算法

概述 在人工智能领域存在这样的现象,很多用户有人工智能的需求,但是没有相关的技术能力。另外有一些人工智能专家空有一身武艺,但是找不到需求方。这意味着在需求和技术之间需要一种连接作为纽带。 今天PAI正式对外发布了“AI市场”以及“PA…

Gartner:阿里云蝉联全球第三、亚太第一

4月23日消息,国际研究机构Gartner发布最新云计算市场追踪数据,阿里云亚太市场排名第一,全球市场排名第三。阿里云亚太市场份额从26%上涨至28%,接近亚马逊和微软总和;全球市场份额从7.7%上涨至9.1%,进一步拉…

消息点击率翻倍,原来这就是闲鱼背后的神器

阿里妹导读:IFTTT是一个被称为 “网络自动化神器” 的创新型互联网服务理念,它既实用,概念又简单,可以通过标准化协议满足用户的强需求,让各种互联网产品为用户服务,2010年刚推出,就拥有了极高的…

TortoiseGit 将工作区变动文件提交本地仓库_入门试炼_04

文章目录一、将工作区代码提交到本地仓库1.1. 新增/改动文件1.2. 将变动文件提交本地仓库1.3. 填写提交注释说明一、将工作区代码提交到本地仓库 Git的使用类似TFS、SVN等源代码或者文件管理器,惯例的流程: 1.1. 新增/改动文件 改动/修改本地项目中的…

MongoDB Sharding 请勿复用已删除的 namespace

SERVER-17397: Dropping a Database or Collection in a Sharded Cluster may not fully succeed 是 MongoDB 里老大难的问题,库或集合删除操作如果没有完全执行成功,再新建相同名字的集合,可能导致读到老版本数据的问题。 集合分片原理 Mon…

32岁被裁补偿N+2:“感谢裁我,让我翻倍!” 网友:求同款被裁!

2020年的冬天,“冷”的有些频繁。最近浏览一则新闻,19年12月19日,《马蜂窝被曝裁员40% UGC模式变现难?》爆火,据悉马蜂窝将裁员40%,交易中心成了“重灾区”,赔偿N2,留下的除搜索推荐…

JavaScript-操作DOM对象-创建和插入dom节点

插入节点 我们获得了某个Dom节点&#xff0c;假设这个dom节点是空的&#xff0c;我们通过innerHTML就可以增加一个元素了&#xff0c;但是这个DOM节点已经存在元素了&#xff0c;我们就不能这么干了&#xff01;会产生覆盖 将标签 追加 到其他标签 <p id"js">J…

技术架构演进|0到千万DAU,微淘如何走过?

导读&#xff1a;大家经常看到手淘里面的第二个TAB 就是微淘了&#xff01;目前有几千万 DAU&#xff0c;几百亿关注关系&#xff0c;每天几十万的商家生产内容&#xff0c;对系统的挑战较大。产品形态上目前以关注 feeds 流为主&#xff0c;是商家非常重要的获取流量阵地&…

TortoiseGit 更新远程仓库最新代码到本地仓库_入门试炼_05

文章目录1. 更新项目1. 更新项目 拉取和远程仓库保持版本一致

自动驾驶中高精地图的大规模生产:视觉惯导技术在高德的应用

导读&#xff1a;导航、驾驶辅助、自动驾驶等技术的不断发展对地图的精细程度提出了更高的要求。常规的道路级地图对于智能交通系统存在很多不足&#xff0c;针对自动驾驶应用的需求&#xff0c;我们提出了利用视觉惯导技术制作高精地图的方法。 本文将首先介绍视觉和惯导的主…

如何选择基于 Kubernetes 的 PaaS?

作者 | Bram Dingelstad译者 | 弯月&#xff0c;责编 | 郭芮头图 | CSDN 下载自视觉中国出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;我们都遇到过这种情况&#xff1a;有人发现了一个bug&#xff0c;然而这不是一般的软件bug&#xff0c;甚至都不是通常意义上的…

TortoiseGit 推送本地仓库变动文件至远程仓库_入门试炼_06

文章目录1. 将本地仓库变动文件提交远程1. 将本地仓库变动文件提交远程 或者

JavaScript-获得和设置表单的值

文本框 text下拉框 单选框 radio多选框 checkbox隐藏域 hidden密码框 password… 表单的目的&#xff1a;提交信息 获得要提交的信息 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title…

Cloud Toolkit 部署应用到 EDAS Kubernetes 集群

1、在 IntelliJ IDEA 上单击 Cloud Toolkit 的图标&#xff0c;在下拉列表中选择 Deploy to EDAS -> EDAS for Kubernetes Application 2、在 Deploy to EDAS 对话框配置应用部署参数。 说明&#xff1a;如果您还没有在 EDAS 上创建应用&#xff0c;在对话框右上角单击 Cr…

架构师前辈告诉你:代码该如何才能自己写得容易,别人看得也不痛苦

来源 | 编程新说责编 | Carol头图 | CSDN 下载自视觉中国切身感受在这个世界上&#xff0c;最难看懂的文档&#xff0c;永远是同事写的需求文档。最难看懂的代码&#xff0c;永远是同事写的业务代码。我很纳闷&#xff0c;像Spring这样的官方英文文档&#xff0c;我看起来也不太…

20万天猫智慧门店背后的商业思考和技术重构

阿里妹导读&#xff1a;2016年&#xff0c;「新零售」被首次提出&#xff0c;在这些年里&#xff0c;无论是互联网公司、零售企业&#xff0c;还是像酒店、机场等这些服务型业态&#xff0c;都在积极探索新的零售模式。对于天猫这样一个服务了全球诸多品牌的平台来说&#xff0…