密码学数论基础部分总结之 有限域GF(p) Galois Fields
今天花了一下午的时间学习密码学的数论部分,下面将学到的内容进行一下总结,也算是加深记忆。我本身对密码学这方面比较感兴趣,而且本节出现了许多数学公式,使用刚刚学习的LaTex公式来呈现出来,练习练习,何乐而不为。
首先给出了群,交换群(阿贝尔群),环,交换环,整环,域的定义,大致如下图所示:
涉及到的第一个重要的新概念就是有限域$GF(p)$ Galois Fields
有限域的元素个数是一个素数的幂$p^n$,n为正整数,一般记为$GF(p^n)$,我们最为关注的只有两种情况:n=1即$GF(p)$;p为2即$GF(2^n)$。
$GF(p)$的空间是模p的完全剩余类$Z_p : \left\{0, 1, \cdots, p-1 \right\}$
$GF(2^n)$中的的元素是系数为二进制0和1的多项式,最高不超过n-1次。一个元素可以被表示成一个长度为n的位矢量。例如二进制数$11001_2$在$GF(2^5)$中可以记作$x^4+x^3+1$
这样来看,$GF(p)$和$GF(2^n)$域中的元素都可以用多项式来表示,一个多项式可以被表示成如下形式:$$f(x)=a_{n}x^n+a_{n-1}x^{n-1}+\cdots+a_{1}x+a_0=\sum^n_{i=0}a_{i}x^i$$
下面是重头戏,如何计算?针对三种不同的作用域我们定义了三种不同的多项式运算。
1.普通多项式运算。这个不必多说,从小学初中就开始学,就是我们认识的普通多项式。
2.系数在$Z_p$中的多项式运算。和普通多项式运算不同的是,系数要进行模p运算。模可以是任意素数,一般取二,是最简单的情况。例如:$$f(x)=x^3+x^2+1,\ \ g(x)=x^2+x+1\\f(x)+g(x)=x^3+x,\ \ f(x)\times g(x)=x^5+x+1$$
可见多项式的系数在运算的时候进行了模2处理。
3.有限域$GF(2^n)$上的多项式运算。这种运算和计算机的运作方式很相似,对于一个有限域$GF(2^n)$我们定义如下要求:系数对2取模运算,最高次数小于n,多项式对n次素多项式取模运算。既然是域那就有逆元,可以用拓展欧几里得算法求逆。
下面分别介绍在$GF(2^n)$上的四则运算:
1.加法(减法)
$GF(2^n)$上的加法即比特串的异或运算,因为是异或,加减其实是一样的,都是异或而已。$$(x^2+1)+(x^2+x+1)=x\\101_2\oplus 111_2=010_2$$
2.乘法
乘法即比特串的移位和异或运算。实际运算的时候和普通乘法很像,只不过加法变成了异或。下面的运算用了一个小技巧,异或的结果只和参与异或的1的个数有关,奇数则为1,偶数则为0。$$\ \ \ 101\\ \underline{\times011}\\ \ \ \ 101\\ \ \underline{1010}\\ \ 1111$$
或者可以表示为$011_2\times 101_2=(101_2)<<1\oplus (101_2)<<0=1111_2$其中<<为移位符。
3.取模
读者可能会好奇,为什么没有除法。这是因为在$GF(2^n)$上取模运算就相当于除法啦。多项式取模有一个简单的算法,重复用既约多项式剪掉最高次项。下面是一个极其简单的例子。$$(x^3+x^2+x+1)mod(x^3+x+1)=x^2\\1111_2mod1011_2=1111_2\oplus 1011_2=100_2$$
这个例子过于简单,如果用$(x^9+x^8+x^6+x^4+x^3+x^2+x+1)mod(x^4+x+1)$即$1101011111mod10011$有两种做法,一种是在被除数后面补上三个0(除数四位 4-1=3),然后像做除法一样除掉除数10011,如果最高位是1就添1,是零就直接写0,最后得到余数0010。还有一种等价做法就是用除数的最高位和被除数的最高位对齐。减(异或)一次,然后继续这个过程直到产生余数。
密码学数论基础部分总结之 有限域GF(p) Galois Fields的更多相关文章
- 你也可以手绘二维码(二)纠错码字算法:数论基础及伽罗瓦域GF(2^8)
摘要:本文讲解二维码纠错码字生成使用到的数学数论基础知识,伽罗瓦域(Galois Field)GF(2^8),这是手绘二维码填格子理论基础,不想深究可以直接跳过.同时数论基础也是 Hash 算法,RS ...
- 「kuangbin带你飞」专题十四 数论基础
layout: post title: 「kuangbin带你飞」专题十四 数论基础 author: "luowentaoaa" catalog: true tags: mathj ...
- 公钥体系(PKI)等密码学技术基础
公钥体系(PKI)等密码学技术基础 公钥体系(Public Key Infrastructure, PKI)的一些概念 对称密码算法, 典型算法:DES, AES 加解密方共用一个密钥 加/解密速度快 ...
- CTF中密码学一些基础
本文作者:i春秋签约作家MAX. 凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密. 给大家先找两道题,来一起探讨基础密码学 ...
- 密码学的基础:X.690和对应的BER CER DER编码
目录 简介 BER编码 类型标识符 长度 内容 CER编码和DER编码 总结 简介 之前我们讲到了优秀的数据描述语言ASN.1,很多协议标准都是使用ASN.1来进行描述的.对于ASN.1来说,只定义了 ...
- lightoj1336数论基础
#include<iostream> #include<cstdio> #include<cmath> #define ll long long using nam ...
- 数论基础算法总结(python版)
/* Author: wsnpyo Update Date: 2014-11-16 Algorithm: 快速幂/Fermat, Solovay_Stassen, Miller-Rabin素性检验/E ...
- 从BZOJ2242看数论基础算法:快速幂,gcd,exgcd,BSGS
LINK 其实就是三个板子 1.快速幂 快速幂,通过把指数转化成二进制位来优化幂运算,基础知识 2.gcd和exgcd gcd就是所谓的辗转相除法,在这里用取模的形式体现出来 \(gcd(a,b)\) ...
- 1370 - Bi-shoe and Phi-shoe(LightOJ1370)(数论基础,欧拉函数)
http://lightoj.com/volume_showproblem.php?problem=1370 欧拉函数: 在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. φ(n) ...
随机推荐
- PHP 连接数据库基础操作
<?phpheader('Content-type:text/html;charset=utf-8');//1建立 或者 关闭mysql服务器 @符号用于屏蔽错误信息$link=@mysql ...
- centos7 安装rpm版的mysql遇到坑——误删root用户的恢复
在网上找了教程http://blog.csdn.net/frankcheng5143/article/details/77609093安装过程很顺利,随着修改了root的密码后不下心误删了root账号 ...
- Java——native关键字
说明:在使用HashSet的过程中,查看Object.java过程中发现hashCode()方法是以native关键字修饰,没看到过该关键字,这里记录下来. native关键字用来修饰方法,是使用一些 ...
- sql 索引常见失效的几种情况
1. 对于联合索引,没有遵循左前缀原则 2. 索引的字段区分度不大,可能引起索引近乎全表扫描 3. 对于join操作,索引字段的编码不一致,导致使用索引失效 4.对于hash索引,范围查询失效,has ...
- [05]HTML基础之表格标签
1. <table>标签 表格容器,尽量避免用属性书写样式,而是用CSS来表达 border: 数字 //表格边框宽度 2. <caption>标签 表格的标题,一般出现在表格 ...
- Spring boot Sample 008之spring-boot-logback
一.环境 1.1.Idea 2020.1 1.2.JDK 1.8 二.目的 spring boot 整合log4j2 二.步骤 2.1.点击File -> New Project -> S ...
- Chisel3 - 接口方向(Direction)
https://mp.weixin.qq.com/s/36jreQGpDLCCNfmUwI34lA 模块接口有三种方向:Input/Output/Inout.Chisel在声明模块接口的时候,也需 ...
- 前端代码高亮显示解决方案: prism
目录 1. 场景描述 2. React Prism 2.1 prismjs 库 2.2 babel-plugin-prismjs 插件 3. demo 4. 注意点 5. 参考链接 1. 场景描述 在 ...
- 【图机器学习】cs224w Lecture 15 - 网络演变
目录 Macroscopic Forest Fire Model Microscopic Temporal Network Temporal PageRank Mesoscopic 转自本人:http ...
- Java实现 LeetCode 416 分割等和子集
416. 分割等和子集 给定一个只包含正整数的非空数组.是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: ...