密码学

K:hash的应用场景

我是研究僧i 提交于 2020-02-10 07:25:21
本博文主要用于讲解Hash的应用场景 Hash主要应用于数据结构中和密码学中。 用于数据结构时,主要是为了提高查询的效率,这就对速度比较重视,对抗碰撞不太看中,只要保证hash均匀分布就可以。 在密码学中,hash算法的作用主要是用于消息摘要和签名,换句话说,它主要用于对整个消息的完整性进行校验。 1. 数据结构 使用Hash的数据结构叫做散列表,主要是为了提高查询的效率。也有直接译作哈希表,也叫Hash表, Hash表是一种特殊的数据结构,它同数组、链表以及二叉排序树等相比较有很明显的区别,它能够快速定位到想要查找的记录,而不是与表中存在的记录的关键字进行比较来进行查找。这个源于Hash表设计的特殊性,它采用了函数映射的思想将记录的存储位置与记录的关键字关联起来,从而能够很快速地进行查找。 2.密码学 在密码学中,hash算法的作用主要是用于消息摘要和签名,换句话说,它主要用于对整个消息的完整性进行校验。 举个用于消息摘要例子,银行的数据库中是不能保存用户密码的原文的,只能保存密码的hash值。在这种应用场景里,对于抗碰撞和抗篡改能力要求极高,对速度的要求在其次。一个设计良好的hash算法,其抗碰撞能力是很高的。 需要注意的是,hash算法在密码学中,主要用于信息的摘要和完整性校验,而不是加密。 概括来说,哈希(Hash)是将目标文本转换成具有相同长度的、不可逆的杂凑字符串

盐(salt value)密码学

时间秒杀一切 提交于 2020-02-04 06:42:55
盐 (Salt),在 密码学 中,是指在 散列 之前将散列内容(例如:密码)的任意固定位置插入特定的字符串。这个在散列中加入字符串的方式称为“加盐”。其作用是让加盐后的散列结果和没有加盐的结果不相同,在不同的应用情景中,这个处理可以增加额外的安全性。 在大部分情况,盐是不需要保密的。盐可以是 随机 产生的字符串,其插入的位置可以也是随意而定。如果这个散列结果在将来需要进行验证(例如:验证用户输入的密码),则需要将已使用的盐记录下来。 实现原理 加盐的实现过程通常是在需要散列的字段的特定位置增加特定的字符,打乱原始的字符串,使其生成的散列结果产生变化。比如,用户使用了一个密码: x7faqgjw 经过SHA散列后,可以得出结果: 58ecbf2b3136ceda7fddfd986ba8bd8d59b2d73779691e839f3f176ce2c04b84 但是由于用户密码位数不足,短密码的散列结果很容易被 彩虹表 破解,因此,在用户的密码末尾添加特定字符串(下划线字体为加盐的字段): x7faqgjw abcdefghijklmnopqrstuvwxyz 因此,加盐后的密码位数更长了,散列的结果也发生了变化: 7b5001a5a8bcdcfa1b64d41f6339cfa7a5c0eca04cca6ff6a6c1d6aad17794cc 以上就是加盐过程的简单描述,在实际使用过程中

HTTPS 详解一:附带最精美详尽的 HTTPS 原理图

佐手、 提交于 2020-02-02 13:20:48
HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 前言 作为一个有追求的程序员,了解行业发展趋势和扩充自己的计算机知识储备都是很有必要的,特别是一些计算机基础方面的内容,就比如本篇文章要讲的计算机网络方面的知识。本文将为大家详细梳理一下 HTTPS 的实现原理。 近年来,随着用户和互联网企业安全意识的提高和 HTTPS 成本的下降,HTTPS 已经越来越普及。很多互联网巨头也在力推 HTTPS,比如谷歌的 Chrome 浏览器在访问 HTTP 网站时会在地址栏显示不安全的提醒,微信要求所有的小程序必须使用 HTTPS 传输协议,苹果也要求所有在 App Store 上架的应用必须采用 HTTPS ,国内外的大部分主流网站也都已迁移至 HTTPS,可见 HTTPS 全面取代 HTTP 只是时间问题。 说了这么多,究竟什么是 HTTPS,它与 HTTP 相比有什么优缺点?其底层原理又是怎么实现的呢?下面就为你一一解答,先来看一下 HTTP 的弊端吧。 1、HTTP 的最大弊端——不安全 HTTP 之所以被 HTTPS 取代,最大的原因就是不安全,至于为什么不安全,看了下面这张图就一目了然了。 图1. HTTP数据传输过程 由图可见,HTTP 在传输数据的过程中,所有的数据都是明文传输,自然没有安全性可言

关于比特币的密码学原理

偶尔善良 提交于 2020-02-02 00:30:29
比特币虽然通常被人们称为加密货币,但其实并没有加密任何数据,仅仅是用到了哈希、签名两种密码学算法。 哈希函数 哈希函数的特性: 1、collision resistence 碰撞阻力 具有强碰撞阻力的哈希函数H(),很难找到 输入x≠y,使得H(x)==H(y) 。 碰撞阻力的特性可用于检测数据是否被篡改,只要改变数据的一个字节,就会造成哈希结果的大不相同。比特币中的哈希指针就是用的这个特性,每个区块保存上一个区块的哈希,因此用户只要记住最新区块的哈希,就可以保证整个区块链未被篡改。 注意: 没有哪一个哈希函数能够从数学上证明具有碰撞阻力特性,SHA-256、SHA3只是经过实践目前仍没有有效方法进行碰撞,因此是可靠的,MD5、SHA1这些曾经具有碰撞阻力特性的哈希函数已经被破解,不再具有碰撞阻力特性。 2、hiding 单向不可逆 由x可以很容易的计算出H(x),但是由H(x)不可能推算出x。 单向不可逆特性可用于digital commitment数字承诺,用户可以将信息和一些随机数据组合计算出哈希,然后公布哈希给别人,这样可以 藏匿 信息内容,别人无法猜测承诺的信息;等到需要验证的时候,才将承诺内容公开用于计算哈希,如与事先公布的哈希一致,则可以证明自己预先承诺过的信息。本人也 无法更改承诺 内容,因为这样会造成计算的哈希与一开始公布的哈希不一致。 注意:

论假如有一台无限算力的主机

Deadly 提交于 2020-01-31 20:17:33
开始 前言 这个问题是在和群友吹水时群友提出后来想了一下这个不是三言两语可以说清楚的所以特此写下此篇文章 正文 目前信息安全绝大部分领域还是高度依赖于人的,需要黑客本人的奇思妙想,需要各种灵光一闪的突破,或者说是各种奇技淫巧,一台无限算力的主机并不能自动攻破什么系统,或者自动逆向出什么代码 所以对于黑客而言,一台算力无限的主机应该只会影响到一个领域,那就是密码学,因为 整个现代密码学的安全基础,就建立在各种计算困难问题和关于计算机复杂度的假设上。 比如我们假设目前的各类 密码散列函数(Cryptographic Hash Function) 对于经典计算机来说是 单向函数(One-way Function) ,那么就可以利用其单向性构造各种保护方案。 像是区块链,各种哈希过的敏感数据,他们的安全性就完全依赖于密码散列函数。 比如我们假设世界上没有任何方法能够快速分解大数字的质因数,那么就能依据这个假设构造出RSA公钥体系, 你每天登录各大网站时传输的账号密码,微信聊天的聊天记录,支付宝下达的每一笔订单,全都依靠这种公钥体系保驾护航。 一个计算困难问题得到解决,就意味着密码学里面会有一整个门类的算法失去安全性。比如基于量子计算的Shor算法出现之后,RSA问题和ECDLP都能够被这个算法快速解决,经典的RSA公钥体系和ECC公钥体系就完全崩塌了,大家只能寻找新的

第二十二个知识点:如何用蒙哥马利算法表示一个数字和多个相乘的数字

这一生的挚爱 提交于 2020-01-31 15:58:57
第二十二个知识点:如何用蒙哥马利算法表示一个数字和多个相乘的数字 这篇依旧是密码学实现细节部分中的. 大多数内容来自于[1]. 安全和效率 密码学的目标是设计高度安全的密码学协议,但是同时这些协议也应该被有效率的实现.这样就可以一次一次快速执行而不会因为用户变得而慢下来,例如,在线商场和网络银行都有这种需求.因此我们采取了一些措施来减少加密的成本.这些代价较高的操作就包括正整数模数的算法,因为除法比较费时. 模余操作的代价 从现在开始我们给出 \(x \mod n\) 的概念,就是 \(x\) 除以 \(n\) 的余数,因此它是一个小于 \(n\) 的非负的整数.(等价于在 \(Z/nZ\) 的 \(x\) 类,等等). 注意这里Z/nZ是指模n下的所有剩余类集合的集合,也是一个群 . 让 \(a,b \in Z\) ,假设我们知道 \(a \mod n\) 和 \(b \mod n\) .在许多密码学应用中,我们希望计算结果 \(ab \mod n\) .简单的方法就是先计算 \(ab\) ,然后再模 \(n\) .但是如果我们需要很多个乘法,那么我们就需要多次的模.这会增加代价.例如,在RSA中,消息 \(m\) 的密文通过这样计算出来: \(c = m^e \mod pq\) ,其中 \(p,q\) 是大素数.通过乘 \(e\) 次计算 \(m\) ,每次要模 \(pq\)

密码学中的PBC库

China☆狼群 提交于 2020-01-30 01:24:14
PBC(Pairing-Based Cryptography Libarary)是实现双线性对运算的函数库,由Stanford大学Ben Lynn博士用C开发并开源的密码库。PBC密码库为双线性对实现提供了接口,是基于双线性对密码体制研究的一个非常有用的辅助工具。 库的地址: http://crypto.stanford.edu/pbc/ 待更。 来源: CSDN 作者: 072x104 链接: https://blog.csdn.net/weixin_43958964/article/details/104107166

浅谈区块链密码学

[亡魂溺海] 提交于 2020-01-29 04:00:12
浅谈区块链密码学 密码学起源 众所周知,密码学是数字加密货币实现去中心化信任的基础,目前广为流传的最早密码学的使用,要追溯到公元前58年凯撒大帝所使用的凯撒密码,凯撒在他的军事命令中,将每一个字母都进行了位移,以防止他的敌人在截获凯撒的军事命令之后,直接获取到他的真实情报。 时间来到1949年,既 香农 用比特(bit)量化了信息之后,又重磅发表了《保密系统的通信理论》一文,开辟了用信息论来研究密码学的新思路,这一发现将密码从艺术变成了科学。在 香农 的理论中,信息传输、处理、检测和接收的过程,与密码系统中的加密、解密、分析和破译的过程都可以用信息论的观点进行分析和研究。密码系统本质上也是一种传递信息的系统。 密码学分类 目前主流的密码学分类,主要包含两大块: 传统密码算法和抗量子攻击密码算法QRC(Quantum Resistant Cryptography)。传统密码算法包含经典公钥算法、散列函数、对称密码算法等,这类传统密码算法的共同点都是基于一个数字难题,即大素数因式分解/离散对数。简单来说,给定一个由2个大素数乘积得到的数字,你很难去猜测这个数字的因式分解如何求解,只能通过穷举,相反验证的话在O(1)的时间复杂度内就能得到。 由于这类算法的通病,在1994年,数学家彼得·秀尔发现了秀尔算法(Shor算法),它解决了如下题目: 给定一个整数N,找出他的质因数

常见的加密算法

天大地大妈咪最大 提交于 2020-01-28 23:48:36
常见的加密算法可以分成三类,对称加密算法,非对称加密算法和Hash算法。 对称加密 指加密和解密使用相同密钥的加密算法。对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用,如果企业内用户有n个,则整个企业共需要n×(n-1) 个密钥,密钥的生成和分发将成为企业信息部门的恶梦。对称加密算法的安全性取决于加密密钥的保存情况,但要求企业中每一个持有密钥的人都保守秘密是不可能的,他们通常会有意无意的把密钥泄漏出去——如果一个用户使用的密钥被入侵者所获得,入侵者便可以读取该用户密钥加密的所有文档,如果整个企业共用一个加密密钥,那整个企业文档的保密性便无从谈起。 常见的对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES 非对称加密 指加密和解密使用不同密钥的加密算法,也称为公私钥加密。假设两个用户要加密交换数据,双方交换公钥,使用时一方用对方的公钥加密,另一方即可用自己的私钥解密。如果企业中有n个用户,企业需要生成n对密钥,并分发n个公钥。由于公钥是可以公开的,用户只要保管好自己的私钥即可,因此加密密钥的分发将变得十分简单。同时,由于每个用户的私钥是唯一的,其他用户除了可以可以通过信息发送者的公钥来验证信息的来源是否真实

信息安全与密码学博士:应该掌握的52个知识--(3)T50-- BLS配对签名方案

孤者浪人 提交于 2020-01-28 19:15:47
BLS配对签名方案 目录 方案概述 背景知识 数学公式 签名属性[2] 方案概述 BLS是Boneh–Lynn–Shacham的简称,他们3个人在2003年提出了一个签名方法,因此以他们的名字命名。该签名基于双线性对,是为了解决多次签名多次验签的低效而提出的多次签名方案。 1. 方案可以将多次签名聚合(Aggregation),只用一次签名验证即可![1] 2. 该签名方案是常用的短签名方案。[2] 方案用于多个成员的组的签名中。 背景知识 这个方案的签名生成用到了椭圆曲线群(Elliptic Curve Group)的概念,验签用到了双线性对(Bilingual Pairing)的内容。 双线性对 e: G X G -> G_T e表示一个非退化的可计算的双线性对。其中G, G_T是以素数r 为阶的群。g是群的生成元。 BLS的签名是椭圆曲线群中的元素。 CDH难题,间隙群(gap group) CDH难题,指 Computational Diffie-Hellman难题。对离散(离散很重要,通过mod实现)对数难题来说,等效于已知g,g^x和g^y计算g^(xy)。对椭圆曲线上的点乘运算,等效于已知aG,bG,G,求abG,其中G为基点. 间隙群,是指一个群,在这个群中,CDH问题是难解的,而DDH难题可以有效解决。(这一群的存在也说明,DDH的难度不超过CDH问题的难度)。