密码学之数论准备知识

推荐书籍1:冯登国老师的《密码学原理与实践》(第三版)

一、一些基本概念

1.群
设G是一个非空集合,若在G上定义一个二元运算" · ",它满足
在这里插入图片描述
2.交换群
在这里插入图片描述
3.环
设R是一个非空集合,如果在R中有两种运算 +,⋅ 满足一下条件:
在这里插入图片描述
在许多抽象代数课本中,第(4)条不是环定义所必须的,不过在密码学讨论的环中一般都是包含有单位元的环。

4.模m剩余类环
在这里插入图片描述
5.
在这里插入图片描述
在这里插入图片描述
6.欧拉函数
在这里插入图片描述
7.欧拉函数的一种计算公式
假定
在这里插入图片描述
8.乘法逆
在这里插入图片描述
9.带余除法
在这里插入图片描述
在这里插入图片描述

二、Euclidean算法

  • Euclidean算法又称为辗转相除法,是求给定两个非负整数的最大公约数(用gcd(a,b)表示),其中最为本质的是来源于多项式环中的带余除法
  • 算法的主要步骤是令两个数中较大的数作为被除数,较小的数作为除数做带余除法,得到余数,除数和余数继续做带余除法,直到某一项中余数为0,那么商为最大公约数,换言之,是如下的一个过程。
    在这里插入图片描述
#include <algorithm> // std::swap for c++ before c++11
#include <utility> // std::swap for c++ since c++11
int gcd(int a,int b)
{
    if (a < b)
        std::swap(a, b);
    return b == 0 ? a : gcd(b, a % b);
}

但是这里有一个问题存留就是,怎么证明算法过程是对的,也就是,为什么这么做可以求得最大公约数,需要一个严格的数学证明。
10.在上述Euclidean算法中,有如下结论
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
11.Bezout定理的数学版本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;

void Extended_Euclidean_Algorithm(int a, int b)
{
    int a0 = a;
    int b0 = b;
    int t0 = 1;
    int t = 0;
    int s0 = 0;
    int s = 1;
    int q = a0 / b0;
    int r = a0 - q*b0;
    int temp = 0;
    while (r > 0)
    {
        //迭代系数t
        temp = t0 - q*t;
        t0 = t;
        t = temp;
        //迭代系数s
        temp = s0 - q*s;
        s0 = s;
        s = temp;
        //求最大公约数
        a0 = b0;
        b0 = r;
        q = a0 / b0;
        r = a0 - q*b0;
    }
    r = b0;
    cout << "最大公约数为:" << r << endl;
    cout << "s的值为:" << s << endl;
    cout << "t的值为:" << t << endl;
    cout << "sa+tb=" << s*a + t*b << endl;
}

int main()
{
    int a, b;
    cin >> a >> b;
    Extended_Euclidean_Algorithm(a, b);
    system("pause");
    return 0;
}

这里面最难理解的是两个迭代系数为什么要如此进行求解,为此我们需要如下一个定理。
11.2Bezout定理的计算机版本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
12.
在这里插入图片描述
在这里插入图片描述

三、中国剩余定理

在这里插入图片描述
13.中国剩余定理
在这里插入图片描述
此解由下列式子给出:
在这里插入图片描述
在这里插入图片描述

四、其他有用的结果

14.元素和群的阶数
在这里插入图片描述
15.Lagrange定理
在这里插入图片描述
16.
在这里插入图片描述在这里插入图片描述
17.Fermat小定理
在这里插入图片描述
在这里插入图片描述
详细证明见:密码学中模运算的逆元求解
18.模p的本原元素
在这里插入图片描述
19.
在这里插入图片描述
在这里插入图片描述
可以迅速的确定某个素数的本原元素个数,但是如果还需要计算它们的具体值,还需要根据定义验证所有的幂次值,这在素数非常大的情况下是很难的,有没有什么更快的方法呢?
20.
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值