暂无个人介绍
【密码学】一文读懂SHAMIR门限方案
在介绍gRPC之前,首先先来聊一下gRPC当中用到的一个编码Protobuf。
是的,我又来水文章了,本文带着大家来了解一个新的随机数生成器,基于离散对数的随机数生成器,之前已经带着大家了解过了两个类似的随机数生成器了,其中一个是BBS随机数生成器,另一个是基于RSA的随机数生成器,有兴趣的读者可以自行回顾一下之前的文章哈。
首先呢,祝大家今晚节日快乐,Whirlpool是由Vincent Rijmen(高级加密标准的联合创始人)和Paulo S.L.M.Barreto设计的,后者于2000年首次提出了它。
这里说一下我这十道题的一个出题思路,以及每道题采用的算法(有的算法我改了一点点流程)。提前说一下,本篇文章存在剧透成分。关于题解我这里也没有,期待着其他的大佬们的分享了。逃~~
本文接着来聊一个比较轻松的内容,再来说一个随机数生成器,对于这个随机数生成器呢,这里和之前讲到过的BBS有一些类似,直接来看具体的内容蛤。
我这又来水一篇文章,来聊一下HKDF(基于HMAC的密钥导出函数)。密钥派生函数是密钥管理的组成部分,他的目标是通过一些初始的数据派生出来密码学安全的随机密钥。
感觉我也写了不少的文章了,这里整理一下,之后这个整理会佛系更新,手动狗头,具体的链接查看原文获取吧,因为这个链接好像加不进去。
之前聊过不少非密码学安全的伪随机数生成算法,这次呢,咱们来聊一个密码学安全的伪随机数生成器 「BBS」 ,这个是三位设计者的首字母: Blum、Blum 和 Shub。
瞄了一眼redis的源码,然后发现里面好玩的东西还挺多的,本文来聊一聊redis当中用到的一个随机数生成算法 mt19937,具体源码参见文末的参考资料,在这里就不贴到文本当中了。对于redis源码里面用的是mt19937-64本文先来看一下32位的版本,对于64位的版本,只不过状态当中元素用的是64位的元素,整个运算过程框架是类似的。 「梅森旋转算法」(「Mersenne twister」)是一个伪随机数生成算法,由松本真和西村拓士在1997年提出来的,可以快速产生高质量的伪随机数,修正了古典随机数生成算法当中的很多缺陷。19937这个名字来源于周期长度为梅森素数 。
FNV哈希全名为Fowler-Noll-Vo算法,是以三位发明人Glenn Fowler,Landon Curt Noll,Phong Vo的名字来命名的,最早在1991年提出。它可以快速hash大量的数据并保持较小的冲突概率,适合hash一些相近的字符串比如IP地址、URL、文件名等等。目前FNV算法有三个版本,分别是: FNV-0(已废弃)、FNV-1以及FNV-1a。这三个算法的结构非常相似,因此呢,在这里就一块说了。
在redis的源码当中也有给出siphash(https://github.com/redis/redis/blob/unstable/src/siphash.c)的实现,这里直接给出链接,不贴出来具体的代码了,接下来,我们来看一下这个算法具体的结构。
本文带着大家手动计算了一下完整的简化版AES的整个流程,其实主要都参考了密码学与网络安全这本书,大部分的公式都是从这本书上来的,我是真的喜欢这个例子,麻雀虽小,五脏俱全,用来学习AES的入门感觉非常的合适,如果能够完整的自己手算下来这个例子,然后再去看完整版的AES算法,会简单非常多,主要就是规模扩大了一下,核心的流程还是上面这一套。最后,感谢能看到这里的读者,如果本文对大佬们理解AES有一点点的帮助,也不枉我手动敲了这么多的公式和矩阵了。
本文应该是MurMurHash算法介绍的最后一篇,来一起看一下最新的MurMurHash算法的具体过程,对于最新的算法来说,整个流程和之前的其实也比较相似,这里从维基百科当中找到了伪代码,也就不贴出来Google官方给出的推荐代码了,先来看一下维基百科给出的伪代码,这里只有32位的伪代码。
上次我们聊过了一代的MurMurHash算法,是的,我又来水文章了,今天呢,接着来聊一下二代的MurMurHash算法,二代算法的整体结构实际上和一代算法差不太多,只是对于每一轮数据的处理过程当中的运算有一些差异,算法的来源依然是来自于Google官网给提供的源码,对着源码看的结构,对于这个算法呢,有两个版本,一个是32位的,一个是64位的,对于32位的算法和64位的算法,区别在于两个初始的魔数不同,整体运算过程还是十分相似的。
我来填坑了,之前说来讲一下MurMurHash算法,然后本文来简单描述一下这个算法的主要过程。MurMurHash这个哈希算法在2011年3月1日第一版被提出来,第一版呢最终输出的是一个32bit的哈希值,第一版已经不推荐使用了,本文先来讲一下第一版的算法过程,由于我只找到了这个第一版算法的代码,没有找到对应的参考文献,所以本文的算法流程是我根据Google提供的代码来说的,有哪里说的不对的地方,也欢迎读者指正。
本文依然是闲聊,不讲具体的算法内容,来一个小总结,相信大家看过我写过的文章之后,应该对于md系列算法 sha系列算法 sm3等哈希函数比较熟悉了,不熟悉的读者,我再来安利一下我之前写过的文章或者大家也可以去查阅相关的资料,在这里不再重复描述算法的具体内容了,本文呢,针对哈希函数来一个小小的总结,来看一下哈希函数有哪些公共的特性。
本文还是来随便聊一聊,我们在去看一些密码学算法的结构的过程当中,我们经常的会发现,这些结构内部的数据的处理方式并不都是根据字节来处理的,有可能他们对于数据的处理用的u32或者说是u64,之前我们说了,在计算机的内部,最小的单位是字节,那么我们怎么将这个字节处理成为结构当中需要的u32或者u64呢?本文接下来就来聊一下他们之间的转换过程(还是老样子,只考虑无符号数)
本篇重新回归到随便聊聊的时刻了,才不是因为我没得写了,本篇瞎聊的内容呢就是密码学当中的移位运算的一些知识,如果读者之前学过体系结构或者对于位运算比较熟悉的话,那么这篇文章就可以不用浪费时间去看了,省下来的时间可以多陪陪家人,或者喝杯咖啡休息一下。
这篇文章的灵感来源于我偶然翻到的一个某U盘有关磁盘加密的一个介绍(这一篇不是广告蛤), 然后发现这个模式我之前还真没遇到过,因此呢,就学习了一下,就出来了这一篇文章。
本篇文章,我们接着来看TEA算法的升级版,这个实际上是XTEA算法的升级版,这也是TEA系列算法的最后一篇了,这个算法的祖孙三个就都结束了
Quick UDP Internet Connection(QUIC)协议是Google公司提出的基于UDP的高效可靠协议。有关协议的主要内容就不在本文过多描述了,本文主要是来讲一下,在Nginx当中如何去支持QUIC协议。 由于个人水平有限,如果哪里写的不对的地方,还请各位大佬们指正。
本篇文章,我们来看一下上一次讲过的TEA加密算法的一个升级版XTEA, 相比于TEA, XTEA的安全性显然是更高的,其中的过程要比TEA稍微复杂一点点。
我这又来水文章了,原来我的想法是找一个实现起来简单的加密,越简单越好,然后这个加密算法,突然映入眼帘,只是因为在人群当中看了你一眼,我就相中了你的简单,下面是老套路了,简单的说一下这个算法是怎么来的。
之前杂(瞎)谈(聊)了很多, 本篇文章回归一下, 接着来看一看现代密码学, 那么为什么要看crypto-js当中的aes呢,这里先卖个关子吧, 具体读源码的时候再说, 这肯定不是因为我喜欢js语言, 我js实际上用的一点都不熟,都是现学现卖的。
通过对于日升昌的这个汇票的分析呢,我们可以发现,在中国古代,实际商用的和密码学相关的东西也真不少,这不像上一篇文章当中所提到的易经那么玄学了,这是实打实的一个案例,由此可见整个思想还是想通的。
看到这个标题,估计可能会有不少读者会有疑问,易经这不是个文学作品吗,怎么和数学相关的密码学给搞到一起了,这不是标题党蛤, 下面小Q来给大家聊聊在易经当中所体现的一些密码学的思想,有些资料来源也不太确定,我凭借记忆进行搜索的,如有错误还请各位读者海涵。
之前介绍了很多现代密码学相关的知识,俗话说得好,要站在巨人的肩膀上, 因此呢,接下来聊一聊古典密码的有关知识(才不是因为我现在没素材了, 手动狗头),古典密码相比于现代密码而言,更多的是一些trick或者说文字游戏,不过其中所蕴含的思想在现代密码当中也广泛出现,本文主要给大家介绍一下凯撒密码,这个古老但是又被众人都知晓的一个古典密码。
咱们接着来说小明的故事,上回说到,小明因为设计的日记本由于用了不安全的随机数生成器,成功的又让小红给看到了日记的内容,这时候,小明决定发奋图强,努力的补习了一下相关知识,这时候,小明刚学了加密的相关知识,然后小明心想,这能不能基于加密的相关知识来设计一个随机数生成器呢,这由于密钥在我手里面,然后我每次自增计数器,没有密钥,其他任何人也没办法拿到原始的计数器内容,这加密出来的东西,感觉随机度也挺高的,于是有了今天的这篇文章,基于加密的随机数生成器。
上回说到,小明制作了一个特殊的日记本,在每次输入正确的密码之后,都会随机的生成下一个密码,但是呢,由于小明设计随机数算法选的不太好,这让小红给钻了空子,这时候小明心里别提多伤感了,这。。。这我的日记不就相当于直接公开了吗,这是要社死的节奏啊,不行不行,我要换一个新的方法,这时候,小明刚好学完了密码学当中的散列函数,心想,这我要是直接用散列函数的输出作为随机密码的生成,这不就成了,哈哈,这时候小明心里别提有多美了,于是乎,小明设计出了如下的随机数生成算法。
本文简单的介绍了一下随机数的概念,然后给出了一个非密码学安全的随机数生成器--线性同余法,一定注意,这个方法不要用在密码学相关用途蛤。
本文来先填一下之前挖的坑,简单介绍一个实际的数字签名的方案,给自己挖的坑总是要自己来填的。
本文来简单的聊一聊数字签名,先来看下面一个例子。
本文来里聊一聊密码学当中另一个用的比较广泛的数学知识,椭圆曲线,至于为什么叫椭圆曲线,在参考资料[1]当中, 给出了一个解释。
本文主要来聊一下基于口令的加密(Pasword Based Encrytion), 我更倾向于把password翻译成为口令,这是为了和密码学当中密码区分开,这里的password不是指的某种密码体制,而是相当于容易记忆的一串字符(当然也包括那些用随机字符串所密码的)。
在正式介绍线性反馈移位寄存器(LFSR)之前,先来看一个小故事,相传在遥远的古代,住着4个奇怪的人。
本文来聊一聊零知识证明的一点知识, 本文的例子纯属虚构,故事素材来源于网络和论文,以及我的瞎编, 如有雷同, 纯属巧合。
GCM(Galois计数器模式)同样的也是NIST提出来的,这个模式基于并行化设计,下面来一起看一下这个模式具体是如何工作的吧。
本文简单介绍了CCM模式下的认证和加密机制,实际上这个是AES-CTR模式和CMAC的一个组合,如果理解了前面这两个,本文应该还是比较好理解的。
介于上一篇文章比较水,然后这个和上一篇也比较相似,CMAC是为了解决DAA当中安全性不足的问题而出现的,这个算法一共有三个密钥,K, K1, K2, 其中K1和K2可以由K导出,接下来就来一起看一下CMAC的具体过程吧,这一篇文章其实也不长。
本文将来聊一聊基于哈希函数的消息认证码,在此之前,先来科普一下什么是 「消息认证码」 (MAC), 先来看一个简单的栗子
最近get到了一个新的知识点,rust可以通过FFI(Foreign Function Interface),来编写Python的方法和函数, 然后就想到了用rust来实现一下渣总的滑块和点选图片坐标计算的算法,因为之前py的位运算是在太诡异的原因,我一直是拒绝用py来实现的,现在突然发现rust可以直接构建生成Python可以直接调用的package了,算是个小惊喜,也当学习一下这个用法了。在这里感谢渣总提供的Java版本的算法,渣总yyds。
本文主要参考了文献^[1], 代码参考了^[2], 这里感谢文献作者和代码作者,如果有能力的大佬,可以自行查看原文献,个人水平有限,有哪里写的不对的地方,也欢迎读者指正。
本文主要参考了文献^[1], 代码参考了^[2], 这里感谢文献作者和代码作者,如果有能力的大佬,可以自行查看原文献,个人水平有限,有哪里写的不对的地方,也欢迎读者指正。
上篇文章我们聊到了Diffie-Hellman的密钥交换协议,这次来聊一个和Diffie-Hellman相似的一个加密算法--ElGamal加密算法,该算法同样选择一个素数p和它的一个原根作为公开密钥。
注意这个算法是基于离散对数的,如果对于离散对数不了解的读者可以查看我之前的对于离散对数讲解的文章。
本文来聊一聊有关离散对数的相关知识,接下来在讲DH的秘钥交换协议等算法之前,有必要先来说一下离散对数的相关知识,如果读者对于离散对数这一块非常熟悉的话,可以跳过这一部分,本文只是简单介绍了一下离散对数的相关概念,对于深入的了解可以自行查阅相关书籍(我个人理解也不是非常的透彻,如有描述错误的地方还请读者海涵)。
素数,之前在rsa算法当中简单提到过,但是对于素数是如何产生的,如何判断一个大整数是不是素数并没有进行展开,素数作为密码学当中比较重要的一个元素,本文来梳理一下素数的有关知识。
本文填一个之前留下的坑, 在将AES算法的时候, 里面用到了GF(256)的一个有限域, 那一篇文章中, 我并没有对相关运算进行展开描述, 本文将聊一聊有限域相关的知识。 由于个人水平有限, 如果那里说的不对的地方, 还请各位读者指出。
这次在来聊一个国产密码, 祖冲之算法(ZUC)是中华人民共和国政府采用的一种序列密码标准,由国家密码管理局于2012年3月21日发布,相关标准为“GM/T 0001-2016 祖冲之序列密码算法”,2016年10月成为中国国家密码标准(GB/T 33133-2016)。