今天花了一下午的时间学习密码学的数论部分,下面将学到的内容进行一下总结,也算是加深记忆。我本身对密码学这方面比较感兴趣,而且本节出现了许多数学公式,使用刚刚学习的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的更多相关文章

  1. 你也可以手绘二维码(二)纠错码字算法:数论基础及伽罗瓦域GF(2^8)

    摘要:本文讲解二维码纠错码字生成使用到的数学数论基础知识,伽罗瓦域(Galois Field)GF(2^8),这是手绘二维码填格子理论基础,不想深究可以直接跳过.同时数论基础也是 Hash 算法,RS ...

  2. 「kuangbin带你飞」专题十四 数论基础

    layout: post title: 「kuangbin带你飞」专题十四 数论基础 author: "luowentaoaa" catalog: true tags: mathj ...

  3. 公钥体系(PKI)等密码学技术基础

    公钥体系(PKI)等密码学技术基础 公钥体系(Public Key Infrastructure, PKI)的一些概念 对称密码算法, 典型算法:DES, AES 加解密方共用一个密钥 加/解密速度快 ...

  4. CTF中密码学一些基础

    本文作者:i春秋签约作家MAX. 凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密. 给大家先找两道题,来一起探讨基础密码学 ...

  5. 密码学的基础:X.690和对应的BER CER DER编码

    目录 简介 BER编码 类型标识符 长度 内容 CER编码和DER编码 总结 简介 之前我们讲到了优秀的数据描述语言ASN.1,很多协议标准都是使用ASN.1来进行描述的.对于ASN.1来说,只定义了 ...

  6. lightoj1336数论基础

    #include<iostream> #include<cstdio> #include<cmath> #define ll long long using nam ...

  7. 数论基础算法总结(python版)

    /* Author: wsnpyo Update Date: 2014-11-16 Algorithm: 快速幂/Fermat, Solovay_Stassen, Miller-Rabin素性检验/E ...

  8. 从BZOJ2242看数论基础算法:快速幂,gcd,exgcd,BSGS

    LINK 其实就是三个板子 1.快速幂 快速幂,通过把指数转化成二进制位来优化幂运算,基础知识 2.gcd和exgcd gcd就是所谓的辗转相除法,在这里用取模的形式体现出来 \(gcd(a,b)\) ...

  9. 1370 - Bi-shoe and Phi-shoe(LightOJ1370)(数论基础,欧拉函数)

    http://lightoj.com/volume_showproblem.php?problem=1370 欧拉函数: 在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. φ(n) ...

随机推荐

  1. airflow的安装和使用 - 完全版

    之前试用了azkaban一小段时间,虽然上手快速方便,但是功能还是太简单,不够灵活. Airflow使用代码来管理任务,这样应该是最灵活的,决定试一下. 我是python零基础,在使用airflow的 ...

  2. js 获取百度搜索关键词的代码

    有可能有时候我们会用到在百度搜什么关键词进来我们的网站的,所有我们又想拿到用户搜索的关键词. 这是我研究了半天所得出的办法.话不多说直接贴代码 <script> function quer ...

  3. java-五大内存图

    jrm—Java虚拟机在进行程序运行时会向cpu申请一个内存约为10%左右,该内存被jrm分为5大区域 一:栈内存(stack)用来存储变量 当栈消失时,变量也随之消失.二:堆内存(heap)在Jav ...

  4. JVM中的垃圾收集

    引用计数(Reference Counting) 循环引用问题 标记­清除(Mark and Sweep) 内存池(Memory Pools) Eden 是内存中的一个区域, 用来分配新创建的对象 . ...

  5. 基于 abp vNext 和 .NET Core 开发博客项目 - 使用Redis缓存数据

    上一篇文章(https://www.cnblogs.com/meowv/p/12943699.html)完成了项目的全局异常处理和日志记录. 在日志记录中使用的静态方法有人指出写法不是很优雅,遂优化一 ...

  6. Pandas读取文件报错UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 0: invalid start byte

    pandas读取文件时报UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 0: invalid start by ...

  7. CE未知数值修改

    一样,用植物大战僵尸测试.来搜索修改向日葵生产阳光的CD值. 由于开始并不知道向日葵cd的初始值,所以用CE搜索未知的初始值 返回游戏,每次向日葵晃一下搜索一下减少的值. 锁定修改为0发现成功. 然后 ...

  8. prometheus配置pushgateway功能测试

    一.环境: 1.prometheus服务器ip:192.168.0.208 2.node-exporter客户机ip:192.168.0.202 二.测试设计考虑: pushgateway类似一台信息 ...

  9. 一文说通Dotnet Core的中间件

    前几天,公众号后台有朋友在问Core的中间件,所以专门抽时间整理了这样一篇文章.   一.前言 中间件(Middleware)最初是一个机械上的概念,说的是两个不同的运动结构中间的连接件.后来这个概念 ...

  10. Maven本地仓库/中央仓库(阿里镜像)/JDK配置

    第一步打开你已经下载好的Maven,进入:根磁盘:\......\apache-maven-3.6.2\conf文件夹找到settings.xml文件(没有的可以自行创建一个同名的文件即可) 使用文本 ...