2201_75807960 2024-05-16 00:45 采纳率: 0%
浏览 6

密码学ECC,知道基本公式但是怎么带入求k

计算k值如何知道a值
已知椭圆曲线方程E_23(16,10)和其上的点G= (5,10),计算G的所有倍点。

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-05-16 00:45
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    您想要解决的问题

    您提问的目的是要求解椭圆曲线密码学(ECC)中关于计算特定点的倍数(倍点)的问题,特别是如何计算点G的倍数,并求出k值。

    问题出现原因

    这个问题出现的原因是您已经知道了椭圆曲线的基本公式,但不确定如何将这些公式应用到具体的问题中来计算点G的倍数。在椭圆曲线密码学中,计算点的倍数是实现加密和签名等操作的关键步骤。

    问题解决方案

    为了解决这个问题,我们需要使用椭圆曲线点加和点倍的算法。对于椭圆曲线上的点G和整数k,点kG表示点G加到自身k次。计算kG通常涉及以下步骤:

    1. 初始化结果为无穷远点(椭圆曲线上的一个特殊点,表示没有点)。
    2. 从G开始,对每个二进制位的k进行迭代(从最低位到最高位)。
    3. 如果当前位是1,则将结果与当前点G点加。
    4. 将当前点G进行点加操作。

    对于椭圆曲线E_23(16,10)上的点G=(5,10),计算kG可以通过以下步骤实现:

    • 确定椭圆曲线的方程形式,通常是y^2 = x^3 + ax + b。
    • 使用点加算法来迭代计算2G, 4G, ...,直到2^iG,其中i是k的二进制表示中最高的1的位置。
    • 使用这些计算出的点来构造kG。

    提供代码

    以下是Python中使用ecdsa库计算kG的示例代码:

    from ecdsa import Curve, Point, SigningKey
    
    # 定义椭圆曲线参数
    curve = Curve(16, 10)
    G = Point(curve, 5, 10, x_is_infinity=False)
    
    # 计算kG,这里k需要您提供具体值
    k = int(input("Enter the value of k: "))
    
    # 使用双倍加法算法计算kG
    def multiply(G, k):
        if k == 0:
            return G.curve.infinity
        elif k < 0:
            return multiply(G, -k).negate()
        elif k & 1:
            return multiply(G, k - 1) + G
        else:
            return multiply(G * 2, k // 2)
    
    kG = multiply(G, k)
    print(f"kG = {kG.x}, {kG.y}")
    

    代码运行方式

    为了运行上述代码,您需要有Python环境,并且安装了ecdsa库。可以通过以下命令安装:

    pip install ecdsa
    

    然后,您可以将上述代码保存为.py文件,并在命令行中运行它。

    代码预期运行结果

    代码将提示您输入k的值,然后计算并打印出kG的坐标。

    推荐相关链接

    请注意,上述代码示例仅用于说明如何使用Python进行ECC计算,实际应用中可能需要考虑安全性和性能优化。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月16日

悬赏问题

  • ¥15 python怎么在已有视频文件后添加新帧
  • ¥20 虚幻UE引擎如何让多个同一个蓝图的NPC执行一样的动画,
  • ¥15 fluent里模拟降膜反应的UDF编写
  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵