飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 7213|回复: 18

[原创] 一字节Patch Lucas公钥算法

  [复制链接]
  • TA的每日心情
    开心
    2021-7-27 17:21
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    发表于 2022-2-11 19:08:21 | 显示全部楼层 |阅读模式
    本帖最后由 BinCrack 于 2022-2-12 18:52 编辑
    bugfix:修复移植时的一处bug,当msg较大时,加密结果错误。(但是在原版Crypto++库中,如果msg足够大,加解密依然会出问题,原因未知)

    玩公子最近跟TC过不去,其中的一个核心公钥算法如该贴所示:https://www.chinapyg.com/thread-142517-1-1.html。在回复中了解到是Lucas公钥算法,孤陋寡闻了。在RSA中,当N太大以至于无法分解时,通常一字节patch掉N来构造一组已知的公私钥对。由于该算法与RSA非常相似,本文尝试同样的Patch思路。

    1. 寻找可用N
    正常情况下N为两个大素数p和q的乘积,我们只需要逐字节修改N,尝试找到一个素数,此时可以认为p和q为别为1和N。随便一找就能得到一大堆备用的N如下:
    [C] 纯文本查看 复制代码
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93c1fad457a17ca85beb40f3fa9152770dac12e163b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93c1fad457a17ca85beb40f3fa9152770dac12e453b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93c1fad457a17ca85beb40f3fa9152770dac12eb13b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93c1fad457a17ca85beb40f3fa9152770dac12edb3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93c1fad457a17ca85beb40f3fa91527c9dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93c1fad457a17ca85beb40f9ea9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93c1fad457a17ca85beb45c3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93c1fad457a17ca85beb4aa3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93c1fad457a17ca85be140f3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93c1fad457a17ca18beb40f3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93c1fad457a17cabdbeb40f3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93c1fad457a17cadfbeb40f3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93c1fad457ae5ca85beb40f3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93c1fad458517ca85beb40f3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93c1fadc97a17ca85beb40f3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93c1fadd87a17ca85beb40f3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93c28ad457a17ca85beb40f3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93e1fad457a17ca85beb40f3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d9d81fad457a17ca85beb40f3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3bd3c1fad457a17ca85beb40f3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc639312fd93c1fad457a17ca85beb40f3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc639c1c3d93c1fad457a17ca85beb40f3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc639ebc3d93c1fad457a17ca85beb40f3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafd713931c3d93c1fad457a17ca85beb40f3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eac3c63931c3d93c1fad457a17ca85beb40f3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b7251fdc63931c3d93c1fad457a17ca85beb40f3fa9152770dac12e8e3b912d
    0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b725ffdc63931c3d93c1fad457a17ca85beb40f3fa9152770dac12e8e3b912d


    2. Python实现与验证
    Lucas的相关实现代码较少,于是照着Crypto++移植了一份到Python中。需要注意的是,在使用私钥加解密时,原版实现中“欧几里得乘法逆”计算部分会报错。归根结底是p和q取值的锅,导致模数被计算为0,此时只需要稍加改动,具体实现如下:
    [Python] 纯文本查看 复制代码
    import gmpy2
    
    def Lucas(e, p, n):
        v,v1 = p,(p*p-2)%n
        i = len(bin(e))-3
        while (i>0):
            i-=1
            if ((e>>i)&1):
                v = (v*v1 - p) % n
                v1 = (v1*v1 - 2) % n
            else:
                v1 = (v*v1 - p) % n
                v = (v*v - 2) % n
        return v
    def Jacobi(aIn, bIn):
        a, b = aIn%bIn, bIn
        result = 1
        while (a > 0):
            i=0
            while ((a >> i)&1 == 0):
                i+=1
            a>>=i
            if (i%2==1 and (b%8==3 or b%8==5)) ^ (a%4==3 and b%4==3):
                result = -result
            a,b=b,a
            a %= b
        return result if(b==1) else 0
    def InverseLucas(e, m, p, q, u):
        d = (m*m-4)
        t1 = p-Jacobi(d,p)
        p2 = Lucas(int(gmpy2.invert(e,t1)), m, p)
        q2 = Lucas(e, m, q)
        return p * (u * (q2-p2) % q) + p2
    
    N=0xaad4474dc8387e81bb095d810f4f4f21d5d7ccc756e3d6e5dee48ac000c25aa0efad0ad3a5ac46f15b50249597461bbb87cdc3f1ba37c17a9a207a3603e38e718f9927a5eb38005d8b72eafdc63931c3d93c1fad457a17ca85beb40f3fa9152770dac12e163b912d
    e=0x10001
    msg = 0x1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345
    enMsg = InverseLucas(e,msg,N,1,0)
    print(hex(enMsg))
    deMsg = Lucas(e,enMsg,N)
    print(hex(deMsg))


    评分

    参与人数 9威望 +10 飘云币 +9 收起 理由
    zhouwensmile + 1 + 1 感谢发布原创作品,PYG有你更精彩!
    不破不立 + 1 + 1 感谢发布原创作品,PYG有你更精彩!
    dryzh + 2 + 1 分享精神,是最值得尊敬的!
    夜先生 + 1 + 1 PYG有你更精彩!
    zhujianhuitx + 1 + 1 PYG有你更精彩!
    zhczf + 1 + 1 PYG有你更精彩!
    飞天 + 1 + 1 感谢发布原创作品,PYG有你更精彩!
    smallhorse + 1 + 1 原创精品 感谢分享!
    wgz001 + 1 + 1 PYG有你更精彩!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2016-4-19 21:35
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2022-2-11 22:07:29 | 显示全部楼层
    本帖最后由 wai1216 于 2022-2-11 22:09 编辑

    仅用于显示

    AC12E8E --> AC12E16
    37 30 44 41 43 31 32 45 38 45 --> 37 30 44 41 43 31 32 45 31 36

    wincmd.zip (295 Bytes, 下载次数: 24)
    PYG19周年生日快乐!
    回复 支持 0 反对 1

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-26 11:14
  • 签到天数: 459 天

    [LV.9]以坛为家II

    发表于 2022-2-11 20:02:32 | 显示全部楼层
    表哥666,带带我
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-10-29 14:35
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    发表于 2022-2-11 20:29:56 | 显示全部楼层
    表哥,求带啊,,,,,,,,,
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 1515 天

    [LV.Master]伴坛终老

    发表于 2022-2-11 21:03:11 | 显示全部楼层
    师傅666,随手就是一发
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 16:50
  • 签到天数: 1592 天

    [LV.Master]伴坛终老

    发表于 2022-2-11 21:54:09 | 显示全部楼层
    表哥神嚓嚓了,膜拜。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-12-4 16:27
  • 签到天数: 644 天

    [LV.9]以坛为家II

    发表于 2022-2-11 23:27:11 | 显示全部楼层
    膜拜啊,都成精了。。。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:29
  • 签到天数: 1584 天

    [LV.Master]伴坛终老

    发表于 2022-2-12 16:53:37 | 显示全部楼层
    大神 学习了
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 15:35
  • 签到天数: 1637 天

    [LV.Master]伴坛终老

    发表于 2022-2-12 22:00:25 | 显示全部楼层
    表哥666,膜拜。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-13 14:14
  • 签到天数: 201 天

    [LV.7]常住居民III

    发表于 2022-2-12 23:08:33 | 显示全部楼层
    666. 膜拜大佬
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表