前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >keyless原理

keyless原理

原创
作者头像
mariolu
修改2018-10-26 22:06:21
5.4K1
修改2018-10-26 22:06:21
举报
文章被收录于专栏:CDN及云技术分享

ssl协议是基于密码学的基础上,解决通信双方加密信道和身份鉴权的安全问题。ssl协议的算法本身是公开的,但是算法本身的输入参数(key)是由通信双方私自保存。在非对称加密中,服务端保存有一对公钥和私钥对,用于服务端鉴权和加密通信。服务端的私钥泄露会导致恶意攻击者伪造虚假的服务器和客户端通信。特别是源站把业务迁移到云或者CDN上,私钥的安全保存要求更高。

一、ssl握手

SSL握手目的是安全协商出双方加解密的密钥。协商算法使用的是公钥算法(也就是非对称密钥算法)。公共密钥算法(如RSA和DH)使用了大量的CPU,是TLS握手中最慢的部分。

1.1、密钥协商

1.1.1、RSA

RSA描述了一对非对称密钥。p和q是一个很大的素数。n是p和q的乘积,也称为公模。n代表位数,也就是密钥安全等级强度。e和(p-1)(q-1)互为素数。其中n和e称为公钥,d称为私钥。

typedef struct rsa_st

{

BIGNUM *p;

BIGNUM *q;

BIGNUM *n;

BIGNUM *e;

BIGNUM *d;

} RSA;

1.1.2、DH

p和q是共享的大数,参与生成密钥。DH算法可以在不安全的信道上传输p和g,协商出对称密钥。p是一个很大的素数,如果是用于生成临时key,512bit,永久key则需要1024bit。g是大于1的素数。通信双方使用一个大数作为私钥,公钥传输给对端。对端使用公钥和自身的私钥协商出对称密钥。

typedef struct dh_st

{

BIGNUM *p;

BIGNUM *g;

BIGNUM *pub_key;

BIGNUM *priv_key;

} DH;

1.2、公钥算法

RSA协商:

RSA的握手过程
RSA的握手过程

服务端发送随机码和公钥,客户端使用公钥加密Premaster secret,在可能不安全的信道传输,服务器取得加密后的premaster,通过私钥还原出Premaster secret。

ECDH(椭圆DH协商)

使用DH的握手过程
使用DH的握手过程

Diffie-Hellman握手是TLS握手的另一种形式。它使用不同的机制:一种用于建立共享的前主机密码。在Diffie-Hellman中,具有不同秘密的双方交换信息以获得共享的秘密。即使服务器私钥被盗窃,记录之前的加密报文也无法恢复原始会话。DH的私钥不参与生成Premaster,只负责签名,做服务端鉴权。

二、keyless

keyless在方案,把服务器的私钥统一管理,并且把服务器的公钥算法中密钥协商的相关计算过程,统一远程调用放在硬件加速卡。提高了处理效率也更安全。来详细看下耗CPU的操作。

2.1、openssl握手分析

SSL很多状态都分A,B两种,A状态表示刚进入该状态还没有收发数据,B状态表示进行的收发数据处理但还没完成善后操作。

  • SSL_ST_ACCEPT->SSL3_ST_SR_CLNT_HELLO_A:服务端接收到客户端的版本号(2byte)+随机码(32byte)+Session ID(1byte)。这个阶段完成加密的选择,还有协议扩展字段的初始化。相应的openssl代码为ssl3_get_client_hello。客户随机码的选择,从客户端的加密套件中选择,目前忽略压缩,设置版本号,s->session创建当前连接的session,session是否复用放在SSL->hit,使用的cipher放在SSL->tmp.new_cipher,新创建或者选择已有的session id。
  • SSL3_ST_SW_SRVR_HELLO_A:发送服务端的随机码和版本号和选择的密钥套件
  • SSL3_ST_SW_CERT_A:添加服务端证书链,发送证书,开始握手
  • SSL3_ST_SW_KEY_EXCH_A:只有在DH算法才需要进行发送服务端选择的secret计算原材料。RSA和ECDHE算法在此步骤都完成签名,用于服务端授权。相应的函数在ssl3_send_server_key_exchange
  • SSL3_ST_SW_CERT_REQ_A:服务端可以选择发起请求客户端的证书或者忽略此步骤
  • SSL3_ST_SR_KEY_EXCH_A:服务端读取客户端发送过来的密钥生成原材料。如果是RSA,则需要使用私钥解密出pre secret。如果是ECDHE,则需要做签名运算。
  • SSL3_ST_SW_SRVR_DONE_A:完成握手

2.2、更改点

  • 对于RSA来说,消耗性能的操作主要在SSL3_ST_SR_KEY_EXCH_A的pre secret的解密上,和SSL3_ST_SW_KEY_EXCH_A签名。
  • 对于ECDHE,消耗性能的操作主要在SSL3_ST_SW_KEY_EXCH_A的签名上。
  • 把这些耗cpu操作调离到远程解密集群的专用硬件,节省了运算时间,并且私钥也更保障
  • 远程解密机器的信道需要加密,并且远程调用两端都需要鉴权,确保是我们的服务器和解密机器。

三、openssl改造

openssl1.0.2的版本其中ssl3_get_client_key_exchange,是server 收到client的处理函数。对于RSA算法,才有使用私钥恢复premaster。所以只需要判断如果是RSA算法,调用远程解密。

其中ssl3_get_send_key_exchange,RSA算法没有做任何动作。而对于ECDHE算法则需要使用私钥做签名。这部分耗时的操作也拉到远程解密集群做。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、ssl握手
    • 1.1、密钥协商
      • 1.1.1、RSA
      • 1.1.2、DH
    • 1.2、公钥算法
    • 二、keyless
      • 2.1、openssl握手分析
        • 2.2、更改点
        • 三、openssl改造
        相关产品与服务
        内容分发网络 CDN
        内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档