密码学的100个基本概念_密码学100个概念(1),Golang性能优化和内存优化面试

k

n

1

(

p

n

1

)

.

.

.

E

k

1

(

p

1

)

E

k

0

(

p

0

)

c=c_{n-1}…c_1c_0=E_{k_{n-1}}(p_{n-1})…E_{k_1}(p_1)E_{k_0}(p_0)

c=cn−1​…c1​c0​=Ekn−1​​(pn−1​)…Ek1​​(p1​)Ek0​​(p0​)若

c

i

=

E

k

i

(

p

i

)

=

p

i

k

i

c_i=E_{k_i}(p_i)=p_i\oplus k_i

ci​=Eki​​(pi​)=pi​⊕ki​则称此类为加法序列密码。

51.反馈移位寄存器

反馈移位寄存器(FSR,Feedback Shift Register)一般由移位寄存器反馈函数(Feedback Function)组成。移位寄存器是由位组成的序列,其长度用位表示,每次移位寄存器中所有位右移一位,最左端的位根据寄存器中某些位计算得到,由寄存器某些位计算最左端位的部分被称为反馈函数,最右端一个寄存器移出的值是输出位。移位寄存器的周期是指输出序列从开始到重复时的长度。

52.线性反馈移位寄存器

线性反馈移位寄存器(LFSR,Linear Feedback Shift Register)的反馈函数是寄存器中某些位简单异或,这些位叫做抽头序列(Tap Sequence),有时也叫 Fibonacci 配置(Fibonacci Configuration)。

**53.

m

m

m序列**

线性反馈移位寄存器输出序列的性质完全由其反馈函数决定,一个

n

n

n位LSFR能够处于

2

n

1

2^{n}-1

2n−1个内部状态中的一个,即**理论上,

n

n

n位LFSR在重复之前能够产生

2

n

1

2^{n}-1

2n−1位长的伪随机序列**(由于全0的状态将使LFSR无止尽地输出0序列,因此是

2

n

1

2^{n}-1

2n−1而不是

2

n

2^{n}

2n)。

只要选择合适的反馈函数便可使序列的周期达到最大值

2

n

1

2^{n}-1

2n−1,即只有具有一定抽头序列的LFSR才能循环地遍历所有

2

n

1

2^{n}-1

2n−1个内部状态,这个输出序列被称为**

m

m

m序列**。为了使LFSR成为最大周期LFSR,由抽头序列加上常数1形成的多项式必须是本原多项式,多项式的阶即移位寄存器的长度。

54.RC4

RC4(Ron RivestCipher)以随机置换为基础,是一个可变密钥长度、面向字节操作的序列密码,该算法由于加解密速度快(比DES快约10倍)、易于软件实现,广泛应用于Microsoft Windows、Lotus Notes等软件中,以及安全套接字层(SSL,Secure Sockets Layer)传输信息。

与基于移位寄存器的序列密码不同,RC4是典型的基于非线性数组变换的序列密码。它以一个足够大的数组为基础,对其进行非线性变换,产生非线性的密钥序列,一般把这个大数组称为S盒。RC4的S盒的大小根据参数

n

n

n(通常

n

=

8

n=8

n=8)的值变化,RC4算法理论上可生成总数

N

=

2

n

N=2^n

N=2n个的S盒。

55.A5

A5算法是GSM 系统中要使用的序列密码加密算法之一,用于加密手机终端基站之间的传输的语音和数据,目前已被攻破。

A5算法是一种典型的基于线性反馈移位寄存器的序列密码算法,由一个22bit长的参数(帧号码, Fn)和64 bit长的参数(会话密钥,Kc)生成两个114 bit长的序列(密钥流),然后与GSM会话每帧(228 bit/帧)异或。

五、哈希函数

56.Hash函数

Hash函数也称哈希函数/散列函数、杂凑函数,是一个从消息空间到像空间的不可逆映射,可将“任意”长度的输入经过变换以后得到固定长度的输出。它是一种单向密码体制,即只有加密过程,不存在解密过程。

57.消息摘要

Hash函数的单向性输出长度固定的特征使其可生成消息的“数字指纹”(Digital Fingerprint),也称消息摘要(MD,Message Digest)哈希值/散列值(Hash Value),主要应用于消息认证数字签名口令的安全传输与存储文件完整性校验等方面。

58.MD5

MD5算法由美国麻省理工学院著名密码学家Rivest设计,他于1992年向IETF提交的RFC1321中对MD5作了详尽的阐述。MD5是在MD2、MD3、MD4的基础上发展而来,由于在MD4上增加了Safety-Belts,MD5又被称为是“系有安全带的MD4”。

算法的输入是最大长度小于

2

64

2^{64}

264bit的消息,输入消息以

512

512

512+bit的分组为单位处理,输出为

128

b

i

t

128bit

128bit的消息摘要。

59.SHA1

1993年,美国国家标准技术研究所NIST公布了安全散列算法SHA0(Secure Hash Algorithm)标准,1995年4月17日,公布的修改版本称为SHA-1,是数字签名标准中要求使用的算法。

SHA1算法的输入是最大长度小于

2

64

2^{64}

264bit的消息,输入消息以

512

512

512 bit的分组为单位处理,输出为

160

160

160bit的消息摘要,因此抗穷举性更好。

60.消息认证

消息认证指验证消息的真实性,包括验证消息来源的真实性,一般称之为信息源认证;验证消息的完整性,即验证消息在传输和存储过程中没有被篡改、伪造等

61.消息认证码

消息认证码(MAC,Message Authentication Code)用来检查消息是否被恶意修改,利用消息和双方共享的密钥通过认证函数来生成一个固定长度的短数据块,并将该数据块附加在消息后。

利用DES、AES等对称分组密码体制的密码分组链接模式(CBC)一直是构造MAC的最常见的方法,如FIPS PUB 113中定义的CBC-MAC。由于MD5、SHA-1等Hash函数软件执行速度比DES等对称分组密码算法要快,目前提出了许多基于Hash函数的消息认证算法,其中HMAC(RFC 2014)已作为FIPS 198标准发布,并且在SSL中用于消息认证。

六、公钥密码

62.RSA公钥密码

1978年,美国麻省理工学院的Rivest、Shamir、Adleman联合提出了RSA公钥密码体制,是第一个安全实用的公钥码算法,其安全性依赖于大整数因子分解的困难性。RSA公钥密码体制可用于加密,也可用于数字签名,且具有安全、易实现等特点。

(1)公私密钥对生成

选取两个大素数

p

q

p、q

p、q(不可泄露),计算

n

=

p

q

n=pq

n=pq及

n

n

n的欧拉函数

φ

(

n

)

=

(

p

1

)

(

q

1

)

\varphi(n) = (p-1)(q-1)

φ(n)=(p−1)(q−1)

随机选取整数

e

(

1

<

e

<

φ

(

n

)

)

e(1<e<\varphi(n))

e(1<e<φ(n))作为公钥,满足

g

c

d

(

e

φ

(

n

)

)

=

1

gcd(e,\varphi(n))=1

gcd(e,φ(n))=1,即

e

e

e与

φ

(

n

)

\varphi(n)

φ(n)互素

使用Euclid扩展算法计算私钥

d

e

1

m

o

d

φ

(

n

)

d \equiv e^{-1} \bmod \varphi(n)

d≡e−1modφ(n),即

e

e

e的逆元

(2)加解密算法

公钥:

(

e

n

)

(e,n)

(e,n)

私钥:

d

d

d

加密:

c

m

e

m

o

d

n

c \equiv m^e \bmod n

c≡memodn

解密:

m

c

d

m

o

d

n

m \equiv c^d \bmod n

m≡cdmodn

63.ElGamal公钥密码

ElGamal公钥密码体制由T.ElGamal于1985年提出,该体制基于有限域上离散对数问题,既可用于加密,又可以用于数字签名。由于其较好的安全性,且同一明文在不同的时刻会生成不同的密文,在实际中得到了广泛的应用,尤其在数字签名方面的应用,著名的**数字签名标准(DSS,Digital Signature Standard)**其实就是ElGamal签名方案的一种变形。

(1)公私密钥对生成

随机选择一个大素数

p

p

p,且要求

p

1

p-1

p−1有大素数因子,

g

Z

p

g \in \boldsymbol Z^{*}_p

g∈Zp∗​是一个本原元(

Z

p

Z_p

Zp​是一个有

p

p

p个元素的有限域,

Z

p

Z^{*}_p

Zp∗​是

Z

p

Z_p

Zp​中的非零元构成的乘法群)

**选一个随机数

x

(

1

<

x

<

p

1

)

x(1<x<p-1)

x(1<x<p−1)作为私钥**,计算

y

g

x

m

o

d

p

y \equiv g^x \bmod p

y≡gxmodp,**公钥为

(

y

g

p

)

(y,g,p)

(y,g,p)**

(2)加解密算法

公钥:

(

y

g

p

)

(y,g,p)

(y,g,p)

私钥:

x

x

x

加密:

C

=

(

c

c

)

C = (c,c^{'})

C=(c,c′),其中

c

g

r

m

o

d

p

c

m

y

r

m

o

d

p

c \equiv g^{r} \bmod p, c^{'} \equiv m y^{r} \bmod p

c≡grmodp,c′≡myrmodp,

r

(

1

<

r

<

p

1

)

r(1<r<p-1)

r(1<r<p−1)为随机数,

解密:

m

(

c

/

c

x

)

m

o

d

p

m \equiv (c{'}/c{x}) \bmod p

m≡(c′/cx)modp

ElGamal公钥密钥体制每次加密运算需要选择一个随机数,密文既依赖于明文,又依赖于选择的随机数,因此对于同一个明文,不同的时刻生成的密文不同。此外,ElGamal加密使得消息扩展了两倍,即密文的长度是对应明文长度的两倍

七、数字签名

64.数字签名

数字签名(Digital Signature),也称电子签名,是指附加在某一电子文档中的一组特定的符号或代码。它利用密码技术对该电子文档进行关信息提取并进行认证形成,用于标识签发者的身份以及签发者对电子文档的认可,并能被接收者用来验证该电子文档在传输过程中是否被篡改或伪造。
在这里插入图片描述

  • 发送方A将消息用Hash算法产生一个消息摘要(Message Digest)
  • 发送方A用自己的私钥对消息摘要进行加密,这个加密后的息摘要就是数字签名
  • 发送方A将消息与签名发给接收方B
  • 接收方B接收到消息及其名后,用发送方A的公钥解密这个签名,获得由发送方A生成的消息摘要
  • 接收方B用发送方A所用Hash算法重新生成所获得消息的摘要,对比这两个摘要。若相同说明签名是发送方A针对这个消息的有效签名,否则签名无效

65.代理签名

代理签名是指原始签名者把他的签名权授权给代理者,代理者代表原始签名者行使他的签名权。当验证者验证代理签名时,验证者既能验证这个签名的有效性,也能确信这个签名是原始签名者认可的签名。

代理签名按照原始签名者给代理签名者的授权形式可分为完全委托的代理签名、部分授权的代理签名(非保护代理者的代理签名、保护代理者的代理签名)、带授权书的代理签名

66.盲签名

盲签名是D.Chaum于1982年首次提出的一种具有特殊性质的数字签名,这种签名要求签名者能够在不知道被签名文件内容的情况下对消息进行签名
即使签名者在以后看到了被签名的消息及其签名,签名者也不能判断出这个签名是他何时为谁生成的。直观上讲,这种签名的生成过程就像签名者闭着眼睛对消息签名一样,所以形象地称为“盲”数字签名。

67.多重数字签名

在数字签名应用中,有时需要多个用户对同一文件进行签名和认证。能够实现多个用户对同一文件进行签名的数字签名方案称为多重数字签名(Digital Multi-signature)方案

68.群签名

1991年,Chaum和Heyst首次提出群签名(Group Signature)(组签名)方案。群签名方案允许组中合法用户以用户组的名义签名,具有签名者匿名,只有权威者才能辨认签名者身份等多个特点。一般来说,群签名的参与者由群成员(签名者)、**群管理员(GC,Group Center)签名接受者(签名验证者)**组成。

69.不可否认签名

不可否认签名本质的是在无签名者合作条件下不可能验证签名的有效性,从而可以防止他所签文件的复制或散布,这一性质使签名者可以控制产品的散发,在电子出版系统和知识产权保护中有所应用。

八、密码协议

70.密码协议

协议是指双方或多方为完成一项任务所进行的一系列步骤,而每一步必须依次执行,在前一步完成之前,后面的步骤都不能执行。

密码协议是以密码算法(包括对称密码算法、公钥密码算法、散列函数等)为基础完成某项任务并且满足安全需求的协议,也称作安全协议。常见的密码协议包括:密钥建立协议、认证协议、零知识证明协议、比特承诺、安全多方计算协议等。

71.参与者

参与者指参与协议的各方,每个参与者被抽象为具有概率多项式时间算法的图灵机.参与者可能是朋友或完全信任的人,也可能是敌人或相互完全不信任的人。据参与者在协议中的行为将其分为:诚实参与者、半诚实参与者和恶意参与者。

72.诚实参与者

诚实参与者完全按照要求完成执行过程中的各个步骤,同时保密自己的所有输入、输出及中间结果。诚实参与者也会根据自己的输入、输出以及中间结果来推导其他参与者的信息,但是不会被攻击者腐败。

73.半诚实参与者

半诚实参与者在协议的执行过程中,完全按照协议的要求完成协议的各个步骤,但同时可能将自己的输入、输出及中间结果泄露给攻击者。

74.恶意参与者

恶意参与者在协议的执行过程中,完全按照攻击者的意志执行协议的各个步骤,他不但将自己的所有输入、输出及中间结果泄露给攻击者,还可以根据攻击者的意图改变输入信息、伪造中间及输出信息,甚至中止协议。

75.攻击者

协议执行中,攻击者会破坏协议安全性或正确性,通过腐败参与者的一个子集,来控制其对协议进行攻击。根据攻击者对恶意参与者的控制程度、攻击者的计算能力、对恶意参与者的控制程度、网络同步与异步状态、自适应性等准则,可以对攻击者有不同的分类。其中按照对恶意参与者的控制程度,可以将攻击者分为以下下三类:

76.被动攻击者

被动攻击者又称为半诚实攻击者,只是监听恶意参与者的输入、输出及中间计算结果,并不控制恶意参与者的行为(比如修改恶意参与者的输入输出)。

77.主动攻击者

除了监听任意参与者的输入、输出及中间结果外,主动攻击者还控制恶意参与者的行为(如恶意篡改参与者的输入,按照自己的意图控制恶意参与者的输出等)。

78.隐蔽攻击者

隐蔽攻击者(Convert adversary)指介于被动攻击者与主动攻击者之间的攻击者类型,隐蔽攻击者以被发现的概率为(称为遏制因子)危险去攻击协议,被隐蔽攻击者腐败的参与者可以进行主动的腐败行为。

79.半诚实模型

如果所有参与者都是半诚实或诚实的,称此模型为半诚实模型。半诚实成员完全遵守协议,但它会收集协议执行过程中的所有记录,并试图推断其他成员的输入,半诚实模型中的攻击者都是被动的。

80.恶意模型

有恶意参与者的模型称为恶意模型。恶意参与者完全按照攻击者的意愿执行协议的各个步骤,他不但将自己的所有输入、输出以及中间结构泄露给攻击者,还可以根据攻击者的意图改变改变输入信息、伪造中间及输出信息,甚至终止协议。恶意模型中的攻击者是主动的。

81.隐蔽攻击模型

有被隐蔽攻击者参与的模型称为隐蔽攻击者模型,被腐败的参与者可以进行主动的腐败行为,但仅在能小于一定概率不被发现的情况下才可实施腐败行为。

82.零知识证明

零知识证明(Zero Knowledge Proof)由S.Goldwasser、S.Micali 及 C.Rackoff于1985年在论文《The Knowledge Complexity of Interactive Proof Systems》(交互式证明系统中的知识复杂性)首次提出,是一种用于证明者在不泄露任何其他信息的情况下证明其掌握知识正确性的密码学协议。

该协议的一方称为证明者(Prover),用

P

P

P表示;另一方称为验证者(Verifier),用

V

V

V表示。零知识证明指

P

P

P试图使

V

V

V相信某个论断是正确的,但却不向

V

V

V泄露任何有用的信息,即

P

P

P在论证的过程中

V

V

V得不到任何有用的信息。零知识证明除了证明证明者论断的正确性外不泄露任何其他信息或知识。

83.安全多方计算

安全多方计算问题SMC,Secure Multi-party Computation)由由中国计算机科学家、2000年图灵奖获得者姚启智教授于1982年在论文《Protocols for secure computations》中以百万富翁问题(两个百万富翁Alice和Bob想知道他们两个谁更富有,但他们都不想让对方及其他第三方知道自己财富的任何信息),开创了密码学研究的新领域。

安全多方计算是指在一个互不信任的多用户网络中,

n

n

n个参与者

P

1

P

2

.

.

.

P

n

P_1,P_2,…,P_n

P1​,P2​,…,Pn​,每个持有秘密数据

x

i

x_i

xi​,希望共同计算出函数

f

(

x

1

x

2

.

.

.

x

n

)

=

(

y

1

y

2

.

.

.

y

n

)

f(x_1,x_2,…,x_n)=(y_1,y_2,…,y_n)

f(x1​,x2​,…,xn​)=(y1​,y2​,…,yn​),

P

i

P_i

Pi​仅得到结果

y

i

y_i

yi​,并且不泄露

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Go语言工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Go语言全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Golang知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

V

V表示。零知识证明指

P

P

P试图使

V

V

V相信某个论断是正确的,但却不向

V

V

V泄露任何有用的信息,即

P

P

P在论证的过程中

V

V

V得不到任何有用的信息。零知识证明除了证明证明者论断的正确性外不泄露任何其他信息或知识。

83.安全多方计算

安全多方计算问题SMC,Secure Multi-party Computation)由由中国计算机科学家、2000年图灵奖获得者姚启智教授于1982年在论文《Protocols for secure computations》中以百万富翁问题(两个百万富翁Alice和Bob想知道他们两个谁更富有,但他们都不想让对方及其他第三方知道自己财富的任何信息),开创了密码学研究的新领域。

安全多方计算是指在一个互不信任的多用户网络中,

n

n

n个参与者

P

1

P

2

.

.

.

P

n

P_1,P_2,…,P_n

P1​,P2​,…,Pn​,每个持有秘密数据

x

i

x_i

xi​,希望共同计算出函数

f

(

x

1

x

2

.

.

.

x

n

)

=

(

y

1

y

2

.

.

.

y

n

)

f(x_1,x_2,…,x_n)=(y_1,y_2,…,y_n)

f(x1​,x2​,…,xn​)=(y1​,y2​,…,yn​),

P

i

P_i

Pi​仅得到结果

y

i

y_i

yi​,并且不泄露

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Go语言工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Go语言全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-my9udC2O-1713027348556)]
[外链图片转存中…(img-x0GruC2S-1713027348557)]
[外链图片转存中…(img-KDH15SxG-1713027348557)]
[外链图片转存中…(img-1QAmABSe-1713027348558)]
[外链图片转存中…(img-OA6SMekD-1713027348558)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Golang知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go)
[外链图片转存中…(img-W1zZSGEz-1713027348559)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值