首页
学习
活动
专区
圈层
工具
发布

基于ECC-ECDH的密钥交换机制

我的公众号:密码学人CipherHUB 本文描述一种客户端-服务器加密通信方案,核心流程结合临时ECDH密钥交换、HKDF密钥强化、AES-GCM数据加密三阶段技术栈。...该方法兼顾效率与安全性,适用于敏感数据传输场景(如凭证交换、支付信息传输)。...通过ECDH算法计算共享密钥 SharedSecret = ECDH(ECC-Tmp-Key-B_Private, ECC-PERSIST-KEY-A) 安全逻辑:前向保密基础,会话密钥与服务器私钥无直接关联...)使用AES-GCM加密 {Cipher, Tag} = AES-GCM-Encrypt(DerivedKey, SecretPlain) 优化点:HKDF消除原始ECDH输出中的椭圆曲线坐标数学特征...设计思想 现代密码学分层设计思想: 非对称层:ECDH提供密钥协商(临时密钥实现前向保密) 转换层:HKDF消解算法耦合,输出标准化密钥 对称层:AES-GCM实现高速保密通信undefined

18921

TLS协议分析 (五) handshake协议 证书与密钥交换

服务器证书的公钥,必须和选择的密钥交换算法配套。...由于TLS没有给这些算法定义对应的签名算法,这些证书不能在TLS中使用。 如果一个CipherSuite指定了新的TLS密钥交换算法,也会指定证书格式和要求的密钥编码方法。...消息没有足够的信息,不能让客户端完成premaster的密钥交换时,服务器才发送 server Key Exchange, 主要是对前向安全的几种密钥协商算法,列表如下: DHE_DSS DHE_RSA...DH_anon ECDHE_ECDSA ECDHE_RSA ECDH_anon 对下面几种密钥交换方法,发送ServerKeyExchange消息是非法的: RSA DH_DSS DH_RSA ECDH_ECDSA...signed_params 对需要认证的(即非anonymous的)密钥交换,对服务器的密钥交换参数的数字签名。

1.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ECDH椭圆双曲线(比DH快10倍的密钥交换)算法简介和封装

    前面有几篇blog就提到我有计划支持使用ECDH密钥交换。近期也是抽空把以前的DH密钥交换跨平台适配从atgateway抽离出来,而后接入了ECDH流程。...所以有些工程实践中会每隔一段时间再走一次密钥交换流程来更换密钥。 ECDH和DH 使用ECDH做密钥交换得时候你可能也会看到ECDHE这个词,这个多出来的E的意思是指每次公钥都随机生成。...= NULL) *priv_key = dh->priv_key; } 比较好的消息是DH和ECDH的流程基本一致,只是传输内容不同。...实际上我接入的时候是对它的代码流程有些许优化话,主要还是减少不必要的拷贝。...交互流程差异 步骤 DH ECDH 初始化 加载DH参数(主要是一个大素数P和系数G),由DH参数决定密钥长度 加载双曲线(RFC 4492),由双曲线决定密钥长度 服务器下发系数 下发DH算法的P(大素数

    5.6K30

    科普 TLS 1.3 — 新特性

    以 ECDHE 密钥交换算法为例,TLS1.2 协议完整的 SSL 握手过程如下: 第一步,首先客户端发送 ClientHello 消息,该消息中主要包括客户端支持的协议版本、加密套件列表及握手过程需要用到的...消息; 第三步,客户端接收 ServerKeyExchange 后,使用证书公钥进行签名验证,获取服务器端的 ECDH 临时公钥,生成会话所需要的共享密钥;生成 ECDH 临时公钥和 ClientKeyExchange...消息发送给服务端; 第四步,服务器处理 ClientKeyExchange 消息,获取客户端 ECDH 临时公钥;服务器生成会话所需要的共享密钥;发送密钥协商完成消息给客户端; 第五步,双方使用生成的共享密钥对消息加密传输...客户端发送 ClientHello 消息,该消息主要包括客户端支持的协议版本、DH 密钥交换参数列表 KeyShare; 服务端回复 ServerHello,包含选定的加密套件;发送证书给客户端;使用证书对应的私钥对握手消息签名...KeyShare 消息后,使用证书公钥进行签名验证,获取服务器端的 ECDH 临时公钥,生成会话所需要的共享密钥; 双方使用生成的共享密钥对消息加密传输,保证消息安全。

    3.8K60

    WhatsAPP通讯协议端对端加密人工智能

    Signal protocol 是真正的端到端的通讯加密协议,号称是世界上最安全的通讯协议,任何第三方包括服务器都无法查看通讯内容。...虽然这种方法的名字叫 “密钥交换”,但实际上双方并没有真正交换密钥,而是通过计算生成出一个相同的共享密钥。因此,这种方法也称 DH 密钥协商。...所有人都要将这 3 种密钥对的公钥上传到服务器上,以便其他人发起会话时使用。...6) Bob 和 Alice 使用消息密钥进行加密通讯。 由上可知,X3DH 实际是复杂版的 DH 协议,解决了在不安全的网络里如何确定消息密钥的问题。...3、发送人使用签名密钥(Signature Key)签名密文 4、发送人将单个密文消息发给服务器,服务器将消息分发给所有群组成员 消息发送人链密钥(Chain Key)的 “哈希棘轮(hash ratchet

    5.1K31

    基于TLS1.3的微信安全通信协议mmtls介绍

    通信双方Alice和Bob使用ECDH密钥交换协议进行密钥协商,ECDH密钥交换协议拥有两个算法: 密钥生成算法ECDH_Generate_Key,输出一个公钥和私钥对(ECDH_pub_key, ECDH_pri_key...这样一来Alice和Bob仅仅通过交换自己的公钥ECDH_pub_key,就可以在Internet这种公开信道上共享一个相同密钥Key,然后用这个Key作为对称加密算法的密钥,进行加密通信。...消息认证码的认证方式需要一个私密的Key,由于此时没有一个私密的Key,因此ECDH认证密钥协商就是ECDH密钥协商加上数字签名算法。在mmtls中我们采用的数字签名算法为ECDSA。    ...双方密钥协商时,再分别运行签名算法对自己发出的公钥ECDH_pub_key进行签名。收到信息后,首先验证签名,如果签名正确,则继续进行密钥协商。...另外,结合具体的使用场景,mmtls在TLS1.3的基础上主要做了以下几方面的工作:    轻量级。砍掉了客户端认证相关的内容;直接内置签名公钥,避免证书交换环节,减少验证时网络交换次数。  安全性。

    6.5K111

    详解国密SSL ECC_SM4_SM3套件

    国密SSL估计是担心与未来的TLS版本号冲突,选择了0x0101。这在实现上带来一定的麻烦,因为现有很多网络库会认为这是一个无效的协议版本,需要一一将判断修改过来。...密钥交换 实现时请参考RSA的密钥交换,而不要参考椭圆曲线密钥交换算法ECDH或ECDHE,这点需要注意。具体过程为: 服务器发送SM2公钥(在加密证书中)到客户端。...服务器使用SM2私钥解密,得到Pre-Master Secret,通过一定的处理得到Master Secret,再次处理得到会话密钥,这个也是一个SM4对称加密算法的密钥。...在握手协议的最后一步,双方会互相发送Finished消息,其中就包含VerifyData,加密发送给对方。如果双方的密钥不同,校验不会通过。...后来才明白,对于ECC_SM4_SM3套件而言,会话密钥其实主要由客户端决定。对于客户端而言,这个消息不处理也没有问题,所以我把这个消息的处理略过了。

    7.2K10

    TLS加密套件之密钥交换

    DH 算法:DH 交换密钥时就只有客户端的公钥是变化,而服务端公钥是不变的,那么随着时间延长,黑客就会截获海量的密钥协商过程的数据,因为密钥协商的过程有些数据是公开的,黑客就可以依据这些数据暴力破解出服务器的私钥...ECDHE 算法是在 DHE 算法的基础上利用了 ECC 椭圆曲线特性,可以用更少的计算量计算出公钥,以及最终的会话密钥。...因为加密套件的第二个部分是针对证书的要求,所以当服务器配置ECC证书时,加密套件只能选择ECDSA_XXX或者ECDH_XXX。...当服务器配置RSA证书时,只能选择RSA_XXX或者ECDHE_RSA_XXX形式的加密套件。(这里解释下原因:如果RSA证书,那么密钥交换方式也是RSA的,肯定可以。...比如说服务器选择了ECDH_RSA加密套件,但是发送的证书却是ECDSA签名的证书,虽然说证书签名类型不影响整个握手,但是对于校验严格的客户端,这种情况可能会导致客户端断开链接。

    1.2K51

    为什么我强烈建议你使用ECC 证书

    非对称密钥交换能在不安全的数据通道中,产生只有通信双方才知道的对称加密密钥。...Be Signed Certificate)信息; 签发数字签名:使用 HASH 函数对 TBSCertificate 计算得到消息摘要,再用 CA 的私钥进行加密,得到签名; 校验数字签名:使用相同的...在 ECDHE 密钥交换中,服务端使用证书私钥对相关信息进行签名,如果浏览器能用证书公钥验证签名,就说明服务端确实拥有对应私钥,从而完成了服务端认证。密钥交换和服务端认证是完全分开的。...可用于 ECDHE 数字签名的算法主要有 RSA 和 ECDSA,也就是目前密钥交换 + 签名有三种主流选择: RSA 密钥交换(无需签名); ECDHE 密钥交换、RSA 签名; ECDHE 密钥交换...RSA 证书可以用于 RSA 密钥交换(RSA 非对称加密)或 ECDHE 密钥交换(RSA 非对称签名);而 ECC 证书只能用于 ECDHE 密钥交换(ECDSA 非对称签名)。

    12.2K20

    GoLang:你真的了解 HTTPS 吗?

    HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。这个协议由网景公司(Netscape)在 1994 年首次提出,随后扩展到互联网上。...就协商密钥 SK 这块,笔者推荐《扫盲 HTTPS 和 SSL/TLS 协议[3]:密钥交换(密钥协商)算法及其原理》和《密钥协商机制》。...本文直接扔出结论,HTTPS 协商对称加密密钥 SK 的办法有很多种,介绍 3 种较为常见的办法: 基于非对称加密算法 基于专用密钥交换算法,常见有 DH、ECDH 等 基于共享的 secret,常见有...因此,就有了密钥交换算法(有说法是 keyless 方法)。...对端接受到消息后,使用协商出来的对称加密密钥解密数据包,得到原始消息 message;接着也做一次相同的哈希算法得到摘要,对比发送过来的消息摘要和计算出的消息摘要是否一致,可以判断通信数据是否被篡改。

    1.4K20

    即时通讯安全篇(十一):IM聊天系统安全手段之传输内容端到端加密技术

    在此我们引入 ECDH 算法替换 DH 算法。ECDH 密钥协商算法是 ECC 算法和 DH 密钥交换原理结合使用。ECC 是建立在基于椭圆曲线的离散对数问题上的密码体制。...6.5 更安全的密钥交换协议—— X3DH对比最初的方案,为了满足消息的前向安全和后向安全,我们增加了双棘轮算法,在原基础方案上为每个人增加了一组会话级别临时 DH 密钥,每个人都拥有一个长期密钥和一组临时密钥...所有人都要将这 3 种密钥对的公钥上传到服务器上,以便其他人发起会话时使用。...此时每一个成员都拥有群内所有成员的链密钥和签名公钥;3)当一名成员发送消息时,首先用 KDF 链棘轮算法生成的消息密钥加密消息,然后使用私钥签名,再将消息发给服务器,由服务器发送给其它成员;4)其它成员收到加密消息后...这样操作,离开的成员就无法查看群组内的消息了。由上可知:一个人在不同的群组里,会生成不同的链密钥和签名密钥对,以保障群组之间的隔离。

    2.4K30

    大型网站的HTTPS实践(一)---HTTPS协议和原理

    5, 浏览器接收server_key_exchange之后,使用证书公钥进行签名解密和校验,获取服务器端的ECDH临时公钥,生成会话所需要的共享密钥。 至此,浏览器端完成了密钥协商。...6, 浏览器生成ECDH临时公钥和client_key_exchange消息,跟RSA密钥协商不同的是,这个消息不需要加密了。...7, 服务器处理client_key_exchang消息,获取客户端ECDH临时公钥。 8, 服务器生成会话所需要的共享密钥。 9, Server端密钥协商过程结束。...首先是使用哈希函数对待签名内容进行安全哈希,生成消息摘要,然后使用CA自己的私钥对消息摘要进行加密。 数字签名的校验。...根CA证书都是自签名,即用自己的公钥和私钥完成了签名的制作和验证。而证书链上的证书签名都是使用上一级证书的密钥对完成签名和验证的。 5. 怎样获取根CA和多级CA的密钥对?它们是否可信?

    1.5K60

    TLS协议分析 (四) handshake协议概览

    -v1_5等 非对称密钥协商,有:DH,DHE,ECDH,ECDHE 等 非对称数字签名:RSASSA-PKCS1-v1_5,RSASSA-PSS,ECDSA,DSA,ED25519 等 另外,非对称加密算法...相比之下,ECC(椭圆曲线)这一块的算法就很清晰,ECDSA只能用作数字签名,ECDH只能用作密钥交换。...TLS规定以后如果要新增密钥协商方法,可以订制这4条消息的数据格式,并且指定这4条消息的使用方法。密钥协商得出的共享密钥必须足够长,当前定义的密钥协商算法生成的密钥长度必须大于46字节。...并且,如果需要的话,server会发送一条ServerKeyExchange消息,(例如如果服务器的证书只用做签名,不用做密钥交换,或者服务器没有证书)。...关于非对称的性能: 例如在2015年的服务器cpu: Intel(R) Xeon(R) CPU E3-1230 V2 @ 3.30GHz 上, 使用如下命令测试: openssl speed rsa2048

    1.9K31

    如何建立TLS连接?TLS握手失败可能这个原因!

    TLS握手阶段要在下面四环里实现不同类型的安全性,TLS“四大护法”: 密钥交换算法:保证对称密钥的交换是安全,典型算法DHE、ECDHE 身份验证和签名算法:确认服务端的身份,即对证书验证,非对称算法就用在这...典型的密码套件 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA(0xc013) TLSTLS协议 ECDHE,密钥交换算法,双方通过它就不用直接传输对称密钥,只需通过交换双方生成的随机数等信息...非对称算法用于交换随机数等信息,以便生成对称密钥;对称算法用于信息的加解密。...Cipher Suite 在握手阶段,TLS需要四类算法的参与,分别是:密钥交换算法、身份验证和签名算法、对称加密算法、消息完整性校验算法。...TLS握手过程包括客户端发送ClientHello消息,服务器返回ServerHello消息和证书,客户端验证证书并发送加密所需的信息,服务器确认并发送加密所需的信息,最后客户端发送Finished消息

    2.2K40

    基于 TLS 1.3的微信安全通信协议 mmtls 介绍(上)

    通信双方 Alice 和 Bob 使用 ECDH 密钥交换协议进行密钥协商,ECDH 密钥交换协议拥有两个算法: 密钥生成算法 ECDH_Generate_Key,输出一个公钥和私钥对 (ECDH_pub_key...这样一来 Alice 和 Bob 仅仅通过交换自己的公钥 ECDH_pub_key,就可以在 Internet 这种公开信道上共享一个相同密钥 Key,然后用这个 Key 作为对称加密算法的密钥,进行加密通信...消息认证码的认证方式需要一个私密的 Key,由于此时没有一个私密的 Key,因此 ECDH 认证密钥协商就是 ECDH 密钥协商加上数字签名算法。...和 Signature1,这样他就可以实施中间人攻击,让客户端每次拿到的服务器 ECDH 公钥都是 svr_pub_key1:客户端随机生成 ECDH 公私钥对(cli_pub_key, cli_pri_key...解决办法也很简单,就是在握手请求的 ClientHello 消息中带一个 Client_Random 随机值,然后在签名的时候将 Client_Random 和 svr_pub_key 一起做签名,这样得到的签名值就与

    21.5K03

    HTTPS 和 SSLTLS 协议:密钥交换(密钥协商)算法及其原理

    今天这篇来介绍一下实战中使用的“密钥协商算法”。 ★密钥交换/协商机制要达到啥目的? 前一篇介绍了 SSL/TLS 的身份认证机制。...通俗地说,即使有攻击者在偷窥你与服务器的网络传输,客户端(client)依然可以利用“密钥协商机制”与服务器端(server)协商出一个用来加密应用层数据的密钥(也称“会话密钥”)。...◇数学原理   (如果你属于那种“看了数学公式就犯晕的人”,可以直接略过本小节,不影响你看后续的章节)   从概念上讲:DH 依赖的是:求解“离散对数问题”的复杂性。...◇如何防范偷窥(嗅探)   使用这种算法,在协商密钥的过程中交换的是密钥的标识(ID)而【不是】密钥本身。   就算攻击者监视了全过程,也无法知晓密钥啥。...对于单独使用   如果攻击者篡改了协商过程中传送的密钥 ID,要么服务端发现 ID 无效(协商失败),要么服务端得到的 ID 与客户端不一致,在后续的通讯步骤中也会发现,并导致通讯终止。

    10.9K30

    【RSA】HTTPS中SSLTLS握手时RSA前后端加密流程

    对于ECDHE来说,客户端和服务器双方是交换椭圆曲线参数,私钥只是用来签名,这是为了保证这个消息是持有私钥的人给我发的,而不是冒充的。双方交换完参数之后生成预主密钥,再生成主密钥和会话密钥。...可以看出RSA和椭圆曲线密钥交换算法的私钥用途是不一样的,RSA密钥交换时是用来做加解密的,椭圆曲线密钥交换时是用来做签名的。...另外一个不同点在于 ClientKeyExchange 消息中传递给 Server 预备主密钥长度不是 48 字节。基于 DH/ECDH 算法的协商密钥长度取决于 DH/ECDH 算法的公钥。...这里我们重要关注 protocol = TLS 1.2 的所有消息。整体流程和上面分析的基于 DH 密钥交换算法的是一致的。...由于协商出来的是 ECDHE 密钥协商算法,所以 Server 需要把 ECDH 的参数和公钥通过 ServerKeyExchange 消息发给 Client。

    1.7K10

    基于 TLS 1.3的微信安全通信协议 mmtls 介绍(下)

    上一篇:《基于 TLS 1.3的微信安全通信协议 mmtls 介绍(上)》 3.3 Record 协议 —- 使用对称加密密钥进行安全的通信 经过上面的 Handshake 过程,此时 Client...现实中也有对消息追加 CRC 校验来解决密文被篡改问题的,实际上经过精心构造,即使有 CRC 校验仍然能够被绕过。...四、小结 mmtls 是参考 TLS1.3 草案标准设计与实现的,使用 ECDH 来做密钥协商,ECDSA 进行签名验证,AES-GCM 作为对称加密算法来对业务数据包进行认证加密,使用 HKDF 进行密钥扩展...另外,结合具体的使用场景,mmtls 在 TLS1.3 的基础上主要做了以下几方面的工作:    轻量级。砍掉了客户端认证相关的内容;直接内置签名公钥,避免证书交换环节,减少验证时网络交换次数。 ...服务器的过载保护,确保服务器能够在容灾模式下提供安全级别稍低的有损服务。

    9.6K10

    Rabbitmq加密套件详解

    密码套件分为三大部分:密钥交换算法,数据加密算法,消息验证算法(MAC,message authentication code)。 密钥交换算法用于握手过程中建立信道,一般采用非对称加密算法。...MAC顾名思义是一种哈希,用于验证消息的完整性,包括整个握手流程的完整性(例如TLS握手的最后一步就是一个对已有的握手消息的全盘哈希计算的过程)。...WITH前面通常有两个单词,第一个单词是约定密钥交换的协议,第二个单词是约定证书的验证算法。要区别这两个域,必须要首先明白,两个节点之间交换信息和证书本身是两个不同的独立的功能。...可选的主要的密钥交换算法包括: RSA, DH, ECDH, ECDHE。可选的主要的证书算法包括:RSA, DSA, ECDSA。两者可以独立选择,并不冲突。...存在多种工具,这些工具可以在启用TLS的服务器端点上执行各种测试,例如,测试它是否易于受到已知攻击(如POODLE,BEAST等)的攻击。

    1.9K20

    HW技站法-搞定通信加密,力防数据泄露

    为了保证加密算法的安全,使用 ECDH 密钥协商算法生成密钥,防范将密钥预埋到客户端上或通过网络传输时的潜在安全风险。...ECDH 密钥协商算法虽然解决了密钥存储和传输的安全问题,但是该算法本身是无法抵抗中间人攻击的。如果密钥协商过程中被中间人攻击,就会导致生成的密钥不可信。...为了解决该问题,便有了升级版的密钥协商算法 ECDHE。它可在密钥协商时使用非对称 ECDSA 签名算法对服务端的公钥进行签名。客户端进行验签操作可有效防御中间人攻击。...图 2 客户端与服务端的密钥协商流程 ECDHE 是基于椭圆曲线的密钥交换算法,可以利用 OpenSSL 库中封装的椭圆曲线算法实现我们自己的密钥协商。...生成公私钥后就要进行另一个环节——密钥交换。

    24510
    领券