开篇 ECDHE_RSA浅析

开篇 ECDHE_RSA浅析

凡事都有个起因,这是本人的第一篇博客,之前工作中,当碰到技术问题时,在度娘一搜,如果有CSDN等各种博客的文章弹出,基本问题都可以得到解决,所以一致很佩服也很羡慕各种博主大神,因此自己也有想写点东西的想法,但是各种原因一直未能实现。最新在学习wireshark,看了一本书,作者谈到关于记录总结的重要性,自己也颇有感触,尤其是现在年龄大了,很多做过的东西或解决的问题,很快就忘了,因此决定开始写点东西,主要是为自己以后查看方便。

最近在使用Wireshark学习TLS协议,发现抓的TLS握手包中的密码套件都是TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,密码套件从功能上一般就三部分:密钥交换、加密、hash。所以从名称中可以看出:ECDHE_RSA是用于密码交换,AES_128_GCM是加密(带有MAC功能),SHA256是hash算法。

这里ECDHE_RSA是让我感到迷惑的地方,因为ECDHE是椭圆曲线的密钥交换算法,那为什么还要RSA呢,因为从技术实现上,没有必要在使用ECC的地方还使用RSA。

后来抓包发现,TLS握手中的证书使用的是RSA算法,而密钥交换使用的是ECDHE,然后使用RSA的公钥(证书中)对ECDHE的密钥交换参数进行了签名(这点是推断,具体数据未用RSA算法进行验证),以防止中间人攻击,感觉确实有点绕。

后来思考了一下原因,感觉可能是由于证书采用了RSA算法导致的原因,并不是技术原因,RSA目前的应用范围确实要比ECC更加广泛。

2020年,新冠病毒肆虐,科比离去,祝大家都能安好!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ECDHE_RSA和P-256都是TLS协议中的加密算法和密钥交换算法。其中,ECDHE_RSA是一种基于椭圆曲线的密钥交换算法,P-256是一种椭圆曲线加密算法,它们通常一起使用以提供更高的安全性。 具体来说,ECDHE_RSA是一种基于椭圆曲线的密钥交换算法,它使用ECDH算法来协商一个临时密钥,然后使用RSA算法对该密钥进行签名,以确保密钥的机密性和完整性。而P-256是一种椭圆曲线加密算法,它使用基于椭圆曲线的数学问题来保护数据的机密性。 如果您想在Java中使用ECDHE_RSA和P-256,可以使用Java Cryptography Extension (JCE)提供的相应算法。具体来说,您可以使用SunJCE提供的ECDHE_RSA和P-256算法,如下所示: ```java import javax.crypto.Cipher; import javax.crypto.KeyAgreement; import javax.crypto.SecretKey; import javax.crypto.spec.GCMParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.security.*; import java.security.spec.ECGenParameterSpec; import java.security.spec.InvalidKeySpecException; import java.security.spec.X509EncodedKeySpec; import java.util.Arrays; public class ECDHE_RSA_P256 { public static void main(String[] args) throws Exception { // Generate ECDH key pair KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC"); ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp256r1"); kpg.initialize(ecSpec); KeyPair kp = kpg.generateKeyPair(); // Generate RSA key pair KeyPairGenerator kpg2 = KeyPairGenerator.getInstance("RSA"); kpg2.initialize(2048); KeyPair kp2 = kpg2.generateKeyPair(); // Generate shared secret using ECDH KeyAgreement ka = KeyAgreement.getInstance("ECDH"); ka.init(kp.getPrivate()); ka.doPhase(kp2.getPublic(), true); byte[] sharedSecret = ka.generateSecret(); // Sign shared secret using RSA Signature sig = Signature.getInstance("SHA256withRSA"); sig.initSign(kp2.getPrivate()); sig.update(sharedSecret); byte[] signature = sig.sign(); // Verify signature using RSA sig.initVerify(kp2.getPublic()); sig.update(sharedSecret); boolean verified = sig.verify(signature); System.out.println("Signature verified: " + verified); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值