数论基础——群环域

数论基础——群环域文章目录一、群环域基本概念1.群2.环常见环3.域与椭圆曲线椭圆FpF_pFp​PointadditionAlgebraicsum椭圆曲线群的阶数ScalarmultiplicationandcyclicsubgroupsSubgrouporder子群的阶FindingabasepointDomainparametersECC(EllipticCurveCryptography)EncryptionwithECDHSigningwithECDSA一、群环域基本概念1.群

大家好,又见面了,我是你们的朋友全栈君。

一、群环域基本概念

1.群

环的概念:
G是一个具有结合律的非空集合,若G满足:

  1. 结合律,即对任意的a,b,c∈G,都有(ab)c=a(bc)
  2. 单位元,即存在一个元素e∈G,使得对任意的a∈G,都有ae=ea=a
  3. 可逆性,即对任意的a∈,都存在a’∈G,使得aa’ = a’a = e

特别的,当G的结合法写作乘法时,G叫乘群,当G写作加法时,G叫加群
群G的元素个数叫做群G的,记为|G|,当|G|为有限数时,G叫做有限群,反之,无限群
密码学中使用的群大多数为循环群
循环群

2.环

设R是具有两种结合法(通常表示为加法乘法)的非空集合,如果以下条件成立:
环的定义1——

  1. R对于加法构成交换群。
  2. (结合律)对于任意的 a , b , c ∈ R a,b,c∈R abcR,有 ( a b ) c = a ( b c ) (ab)c = a(bc) abc=abc
  3. (分配律)对于任意的 a , b , c ∈ R a,b,c∈R abcR,有
    a + b ) c = a c + b c 和 a ( b + c ) = a b + a c a + b)c = ac + bc 和a(b + c)= ab +ac a+bc=ac+bcab+c=ab+ac
    则R叫做.
    整环:整环是无零因子的交换幺环

环的定义2——
环的定义

常见环

常见环

3.域与椭圆曲线

满足:

  • 两个二进制运算加法(+)和乘法(·),二者都满足封闭性,结合律,交换律,单位元,逆元,乘法对加法满足分配律
  • 要求 p p p为素数很重要

椭圆 F p F_p Fp

定义:
{ ( x , y ) ∈ F p 2        ∣        y 2 = x 3 + a x + b , 4 a 3 + 27 b 2 ≠ 0 } ∪ { 0 } \{(x,y)∈F_p^2\;\;\;|\;\;\;y^2=x^3+ax+b,4a^3+27b^2≠0\}∪\{0\} {
(x,y
Fp2y2=x3+ax+b,4a3+27b2=0}{
0}

  • 0是无穷远处的点, a , b ∈ F p a,b∈F_p abFp
  • 对称性,关于 y = p / 2 y=p/2 y=p/2对称

Point addition

F p F_p Fp上椭圆曲线的加法运算法则

  • Q + 0 = 0 + Q = Q Q+0=0+Q=Q Q+0=0+Q=Q
  • Given a non-zero point Q Q Q , the inverse is the point − Q -Q Q having the same abscissa but opposite ordinate. Or, if you prefer, − Q = ( x Q , − y Q    m o d    p ) -Q=(x_Q,-y_Q\;mod\;p) Q=(xQ,yQmodp). For example, if a curve in F 2 9 F_29 F29 has a point Q = ( 2 , 5 ) Q=(2,5) Q=(25), the inverse − Q = ( 2 , − 5    m o d    29 ) = ( 2 , 24 ) -Q=(2,-5\;mod\;29)=(2,24) Q=(2,5mod29)=(2,24)
  • Also, P + ( − P ) = 0 P+(-P)=0 P+(P)=0 (from the definition of inverse element).
    在这里插入图片描述

Algebraic sum

椭圆曲线群的阶数

我们说过,在有限域上定义的椭圆曲线具有有限数量的点。我们需要回答的一个重要问题是:究竟有多少点?

首先,假设群中的点的个数称为群的

尝试所有可能的值从 0 到 p − 1 p-1 p1不是计算点数的可行方法,因为它需要 O ( p ) O(p) Op步骤,这是”困难的”,如果 p p p是一个大素数。

幸运的是,有一种更快的算法可以计算阶数:Schoof算法(在多项式时间内运行)这就是我们需要的。

Scalar multiplication and cyclic subgroups

标量乘法和循环子群
标量乘: n P = P + P + . . . + P nP=P+P+…+P nP=P+P+...+P
使用double and add algorithm算法 O ( l o g    n ) / O ( k ) , ( k O(log\;n)/O(k),(k Ologn/Okk n n n的比特长度)时间复杂度内
我们称 P P Pgeneratorbase point
循环子群是ECC及其他密码系统的基础
在这里插入图片描述在这里插入图片描述

Subgroup order子群的阶

子群的阶数是多少呢?
我们不能使用Schoof算法,因为Schoof算法只适用于整个有限域上的椭圆曲线,而不适用于子群。
我们可以定义:
子群的阶数是使得 n P = 0 nP=0 nP=0的最小正整数 n n n,比如前面的例子中,我们的子群包含五个点,我们有 5 P = 0 5P=0 5P=0
子群 P P P的阶数通过拉格朗日定理与父群的阶数相关,拉格朗日定理指出,子群P的阶数是父群的阶数的除数(divisor),换句话说,如果有限域上的椭圆曲线包含N个点,他的一个子群包含n个点,n|N

n|N   <=>   n是N的一个除数   <=>   n is a divisor of N

在这里插入图片描述
请注意,要采用最小的除数,而不是随机的除数

Finding a base point

对于一个ECC算法,我们需要一个高阶的子群,一般来说,我们会先选择一条椭圆曲线,然后计算他的阶数N,选择一个比较大的因子作为子群的阶,最终去寻找一个合适的基点
子群的协因子h(cofactor of subgroup) h = N / n h=N/n h=N/n
由拉格朗日定理得到
一般我们喜欢群P为素阶,即n是一个素数, N P = 0 NP=0 NP=0,因为 n ∣ N    & &    n P = 0 n|N\;\&\&\;nP=0 nN&&nP=0,因此 G = h P G=hP G=hP
由此,我们得到了一个我们想要的群G,(阶数为n,协因子为h)
注意:n需要是素数,如果n不是素数,则群G的阶为n的一个因子
完整算法如下:
在这里插入图片描述

Domain parameters

我们的椭圆曲线算法将在有限域 F p F_p Fp上椭圆曲线的循环子群上工作,我们的算法将需要以下参数,

  1. 素数 p p p,指定有限域 F p F_p Fp的大小
  2. 系数a和b,确定椭圆曲线方程
  3. 基点G,生成子群
  4. 子群的阶数n
  5. 子群的协因子h

( p , a , b , G , n , h ) (p,a,b,G,n,h) (p,a,b,G,n,h)

ECC(Elliptic Curve Cryptography)

私钥:一个随机数 d ∈ { 1 , . . . , n − 1 } d∈\{1,…,n-1\} d{
1,...,n
1}
,n是子群的阶数
公钥:点 H = d G H=dG H=dG G G G是子群的基点)
如果我们知道 d d d G G G(以及其他域参数),计算 H H H是”容易”的。
如果我们知道 H H H G G G,查找私钥 d d d是”困难”的,因为它要求我们解决离散对数问题
基于此,我将描述两种公钥算法ECDH(椭圆曲线 Diffie-Hellman)和ECDSA(椭圆曲线数字签名算法)

Encryption with ECDH

ECDH是DH密钥协商机制基于椭圆曲线的变体。
工作原理:

  1. Alice和Bob生成自己的公私钥对,Alice有私钥 d A d_A dA和公钥 H A = d A G H_A=d_AG HA=dAG,Bob有私钥 d B d_B dB和公钥 H B = d B G H_B=d_BG HB=dBG,两者使用相同的域参数
  2. 两者在不安全信道上交换公钥 H A    a n d    H B H_A\;and\;H_B HAandHB
  3. Alice计算 S = d A H B S=d_AH_B S=dAHB,Bob计算 S = d B H A S=d_BH_A S=dBHA,
    密钥协商完成shared secret S
    S = d A H B = d A ( d B G ) = d B ( d A G ) = d B H A S=d_AH_B=d_A(d_BG)=d_B(d_AG)=d_BH_A S=dAHB=dA(dBG)=dB(dAG)=dBHA

Signing with ECDSA

z z z为截断的哈希值(长度与子群的阶数n长度相同)
Alice 为对消息进行签名而执行的算法的工作方式如下:

  1. 一个随机值 k ∈ { 1 , . . . , n − 1 } k∈\{1,…,n-1\} k{
    1...n
    1}
    (n是子群阶数)
  2. 计算点 P = k G , G P=kG,G P=kG,G是子群的基点
  3. 计算 r = x p    m o d    n r=x_p\;mod\;n r=xpmodn( x p x_p xp P P P x x x坐标)
  4. 如果 r r r等于0,重新选择 k k k
  5. 计算 s = k − 1 ( z + r d A )    m o d    n s=k^{-1}(z+rd_A)\;mod\;n s=k1(z+rdA)modn
  6. 如果 s = 0 s=0 s=0,重新选取 k k k
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150418.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 注册公司事宜(注册公司需要什么条件)

    本公司专主代办广州注册公司,广州公司注册,创业者可选择的注册公司主要有两类:一是在海外注册公司,二是在内地如广州注册公司,。不管在国内注册还是在海外基本的操作模式都是相同的,只不过对于成立的公司在手续、税收等政策上有点不同,但就是这点不同,会对未来的公司造成巨大的影响。一、在海外注册公司与广州注册公司的区别      创办企业者可以选择在海外注册公司,现在流行的注册海外公司的方法是注册离岸公司。

    2022年4月11日
    48
  • uos访问windows共享打印机_Linux打印机安装命令

    uos访问windows共享打印机_Linux打印机安装命令Unraid安装CUPS实现共享打印和无线打印2020-11-2916:08:3451点赞486收藏51评论创作立场声明:个人瞎折腾,文中部分内容来自网络,本人并非专业人士,只是将个人的折腾经验分享给大家,如有错误请大家指正今年上半年买了一台高配蜗牛,蜗牛D的机箱、G5400的cpu、B365的板子,就开始了一系列的折腾,更换了8700tescpu,带pcie插槽的蜗牛C机箱,4口pci…

    2022年10月9日
    4
  • plantuml 依赖_遇见PlantUML

    plantuml 依赖_遇见PlantUML前言来到公司实习也快一个月了,最大的体会就是,虽然大部分时间做的是简单的增删该查,但不同于在学校时写的Demo,你要充分考虑程序的鲁棒性(健壮性)、可扩展性(可维护性)、时间/空间复杂度等。因为是要实际上线的项目,你需要面面俱到,对团队负责。于是决定在完成组里任务之余,花时间提高自己的的编码规范、多思考程序设计的可扩展性、性能是否可观等。我觉得开发工程师和码农之间的区别是,不仅是复制粘贴和以实现功…

    2025年6月23日
    2
  • pycharm 2022.01 激活码永久【2022.01最新】2022.02.10

    (pycharm 2022.01 激活码永久)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html4KDDGND3CI-eyJsaWNlbnNlSWQi…

    2022年4月1日
    77
  • goland2021.3.26激活破解方法

    goland2021.3.26激活破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    63
  • python发邮件详解,smtplib和email模块详解

    python发邮件详解,smtplib和email模块详解在介绍具体的实现python发邮件的具体操作之前,我觉得有必要介绍下SMTP,更有助于理解python发邮件的实现原理。SMTP协议属于TCP/IP协议簇,即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式,python实现发邮件也是基于此基础上进行封装的。1.python发邮件所需要的基础包python发送邮件需要用到python自带的两个模块,s…

    2025年8月7日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号