ECC加密

关于ECC加密详细说明,请查看下方公众号文章链接:


jgk01-宸极实验室-【深入浅出 ECC】


一、ECC加密概述

1.数学原理

我们假设椭圆曲线上有两个点PQ,然后k为整数。此时有:

Q = k P Q=kP Q=kP

对于给定的kP,根据加法法则,计算Q很容易,但是给定PQ,来求k非常困难

2.加密和解密

  • 选取一条椭圆曲线Ep(a,b),并取椭圆曲线上一点作为基点P
  • 选取一个大数字k为私钥,并且生成公钥Q(Q=kP)
  • 加密:选择随机数r,将明文M生产密文C。密文是一个点,C=(rP,M+rQ)
  • 解密:M+rQ-k(rP)=M+r(kP)-K(rP)=M

二、注意事项

  • 以上操作在有限域中完成:椭圆曲线是连续的,连续并不适合加密,我们需要把椭圆曲线变成离散的点。

  • 这里的加法和乘法(可以看作加法)是 非线性 \color{red}{非线性} 非线性的,不能简单的加减乘除

  • 分数取模,这里使用的是费马小定理

    a b m o d ( p ) = ( a ∗ b p − 2 ) m o d ( p ) \frac{a}{b} mod (p)=(a*b^{p-2})mod(p) ba

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Java实现ECC加密算法的示例代码: ```java import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Security; import java.security.Signature; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.util.encoders.Hex; public class ECCDemo { public static void main(String[] args) throws Exception { Security.addProvider(new BouncyCastleProvider()); // 生成密钥对 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC", "BC"); keyPairGenerator.initialize(256); KeyPair keyPair = keyPairGenerator.generateKeyPair(); PrivateKey privateKey = keyPair.getPrivate(); PublicKey publicKey = keyPair.getPublic(); // 显示密钥对 System.out.println("Private key: " + Hex.toHexString(privateKey.getEncoded())); System.out.println("Public key: " + Hex.toHexString(publicKey.getEncoded())); // 签名 Signature signature = Signature.getInstance("SHA256withECDSA", "BC"); signature.initSign(privateKey); byte[] message = "Hello, world!".getBytes(); signature.update(message); byte[] signatureBytes = signature.sign(); System.out.println("Signature: " + Hex.toHexString(signatureBytes)); // 验证签名 signature.initVerify(publicKey); signature.update(message); boolean verified = signature.verify(signatureBytes); System.out.println("Verified: " + verified); } } ``` 该示例代码使用Bouncy Castle库实现了ECC加密算法,包括生成密钥对、签名和验证签名等操作。其中,生成密钥对使用256位的椭圆曲线,签名算法使用SHA256withECDSA。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值