密码学(一):基础数学知识与密码学的简单介绍 这篇文章用来整理密码学知识,从数论和抽象代数的基础知识开始: 数论部分: 1. 整除的定义:
, 那么
。 2. 整除的几条基本性质: 2.1:若
,则
2.2:若
,则
2.3: 若
,则
3. 素数的定义: 一个数
被称为素数,当且仅当它仅有
和
两个正约数。 若
,那么
或
4. 最大公约数(General common divisor) 的定义: 整数
与
的最大公约数是满足如下条件的最大正整数
:
且
。表示为
5. 辗转相除法(Euclidean algorithm):
则
6. 裴蜀定理(Bezout algorithm)又名广义欧氏算法(extended Euclidean algorithm) 存在整数
使得
7. 模运算(modulo)的定义: 若
,则称
与
对
同余,或者
模
等于
,记作
8. 模运算的几条基本性质: 7.1:若
,则
,
7.2:当且仅当
时,存在
使得
,此时称
为
关于
的逆(Inverse) 9. 完全剩余系: 先定义一个符号
。称作模
的环
, 称作
的一个完全剩余系。
的素个数用欧拉函数
表示。 10. 算术基本定理(Fundamental Theorem of Arithmetic): 大于等于
的正整数
只有唯一一种素因数分解方式:
11. 费马小定理(Fermat Little Theorem): 若
,则
若
,则
12. 欧拉定理(Euler Theorem):
为整数,
为欧拉函数。 若
,则
13. 威尔逊定理(Wilson’s Theorem): 对素数
,
14. 阶(Order)的定义: 当
是最小的满足如下条件的正整数时:
,将
称作
模
的阶。 15. 原根(Primitive Root)的定义:
是一个素数,
,若
,称
是
的一个原根。 换言之,当
模
的阶为
时,
为
的原根。 16. 中国剩余定理(Chinese Remainder Theorem): 若
记
,
则
17. 二次剩余(Quadratic Residue) :
是一个奇素数,
。若存在整数
使得
,称
为
的一个二次剩余 18. 勒让德符号(Legedre Symbol): 对于奇素数
与正整数
,勒让德符号
意为:
几个有关二次剩余的结论:若
,则
2.
3. 当
为奇素数时,
,
19. 二次互反律: 当
与
都是奇素数时,
抽象代数部分: 1.群(Group)公理: 群由一个集合
与一个二运算规则
组成,对于
,有
。 这个二运算
还需满足如下条件: 1.1 单位(Identity Law):
中存在单位
使得
1.2 逆(Inverse Law):对任意
有
,使得
1.3 结合律(Associatative Law) :
如果一个群满足如下的交换律,称其为交换群(Commutative Group) ,或阿贝尔群(Abelian Group) 交换律(Commutative Law) :
2. 有限群与群阶数: 包含有限个素的群为有限群 定义
,共计
个
。若
。称
为
的阶数。 3. 环(Ring)的定义: 环由一个集合
,以及两种运算
与
组成。其中
与
构成一个交换群。
需满足如下条件: 3.1 单位(Identity Law):
3.2 结合律(Associative Law):
3.3 分配律(Distributive Law):
带有交换律
的环被称作交换环(Commutative Ring) 易于验证所有整系数多项式构成一个交换环。 4. 域(Field)和有限域 我们先定义“除环”:若环中的任意非零在
运算下都有逆存在,那么这个环称作除环(Division Ring) 可交换的除环即为域。 或者采取直接定义的方式: 一个集合
中有两种运算
与
。它们都满足结合律,交换律,每个素都具有对应运算下的单位,每个素都有对应运算下的逆。同时满足
的分配律。那么
就称为一个域。 具有有限个素的域即为有限域。 密码学的简单介绍: 1.古早时代的密码: 最早在罗马时代,凯撒就用过这样一种密码,这就是大名鼎鼎的凯撒密码,举例: Alice想向Bob发送一条消息’I want bread’,但是她不想让别人(这里用Eva来代表)知道她具体发送了什么消息,那么她可以做如下操作: 随便挑选一个数字,例如挑了数字3,把每个子母按照拉丁字母表的顺序向后移动3位,那么原信息就变成了‘L zdqw euhdg’接下来她把这串字符和数字3一并发给Bob。如果Alice之前与Bob约定好编码方式的话,那么Bob就可以把每个字母向前移动3位获得原始信息。而Eva只能对着密文干瞪眼。 那么如果挑选的这个数字大于26该怎么办呢?注意到英文字母只有26个,那么对这个数字模26,得到的新数字就是字母移动的位数了。 这个方法在文艺复兴时代得到了加强,形成了一种新的密码体系 ‘Vigenère cipher’: 方法如下: 原文依旧是’I want bread’,但是这时的密钥不再是3了,而是一个单词 ‘water’。那么该怎么用新密钥对原文加密呢? 这里我们将字母与原文设定一个对应关系,例如a对应1,b对应2,… z对应26。那么I对应的字母是w,I就会向后移动23位,由于字母是循环的,那么I就会向前移动3位变成F,w对应的字母是a,w就会向后移动1位变成x。对于前五个字母 ‘Iwant’ 可以密钥water的五个字母全用一遍,到下一个字母b的时候,再重新从water的开头字母 ‘w’ 开始就可以了。 我想过汉字是否也可以按照这个方法来玩,不过要覆盖常用汉字的范围,这个表的素数量起码在4000以上。 2. 密码学的数学表示: 我们假定Alice和Bob都知道用来加密密文的密钥
,这种类型的密文被称作对称密钥加密(Symmetric Ciphers)我们定义密钥集合为
,
。原文集合为
,密文集合为
。 那么加密过程(Encryption)可以表示为 :
,
解密过程(Decryption}可以表示为:
,
对于
与
中所有素,
成立。 对于特定密钥
,有加密过程:
,解密过程:
。其中对于任意
,有
。 这是为了保证解密结果是单一的,防止用一个密钥解出多种原文的情况出现。 我们把这套密码体系记作
。其中Alice和Bob知道
。Alice将
加密为
后将
发送给Bob,Bob可以得到原文
。但对于Eva来说,假定她知道加密与解密过程
。但她不知道密钥
(这正是现实世界中的情况!)。那么如果她想攻破这个密码体系,她仅仅需要知道密钥就可以了。这也就是说密码体系的安全性仅仅依赖于密钥
。这个特性被称作 “Kerckhoff准则”。 如果一个密码系统是成功的话,那么它必须满足以下三条准则:对任意
,
容易计算。对任意
,
容易计算。对于用
加密后的密文
,在不知道密钥
的情况下,
是非常难计算的 接下来是一个加强条件: 即使知道了一些原文与密文的对应关系
,对于任意
,
依旧非常难计算。 这一条是为了防备选择明文攻击(Chosen Plaintext Attack) 一些程序实践: 我用的语言是Python3.10.7。代码可以在我的Github GitHub – Summer-worm/Cryptography: Some works I do when I study cryptography 中的Homework1与Homework2中找到编写一个返回值为两个整数a,b最大公约数的函数fastGCD(a,b):对于裴蜀定理
,编写一个返回值为
的函数extendedGCD(a,b) 试将如下四个数组代入以上函数中求值:
3. 编写一个返回值为a关于p的乘法逆的函数,即
,
代入以下数组求值 (a)
(b)
(c)
4. 编写一个返回值为
的
次方模
的值的函数fastPower(a,n,m): (注意,这里最好把次数
用二进制表示,这个方法名为’Fast Power Algorithm’)
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/25933.html