区块链基础之密码学及安全技术

这篇具有很好参考价值的文章主要介绍了区块链基础之密码学及安全技术。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.2 密码学及安全技术

区块链基础之密码学及安全技术

1.2.1 密码学知识
1.2.1.1 Hash函数
  • Hash(哈希)
    哈希函数是一类数学函数,可以在有限合理的时间内,将任意长度的消息压缩为
    固定长度的输出值,并且是不可逆的。其输出值称为哈希值,也称为散列值。
    区块链基础之密码学及安全技术

  • 哈希算法的应用:
    消息认证:确保收到的消息和发送的消息都是未被篡改的。
    数字签名:对消息摘要进行数字签名与对消息本身进行数字签名等效。
    口令的安全性:仅将口令的哈希值进行保存,进行口令检验时仅需对比哈希值即可,即使攻击者获取了口令的哈希值,也无法计算出口令。
    数据完整性:具有抗数据篡改的能力。

  • Hash函数在区块链中的应用
    区块链基础之密码学及安全技术
    在区块链系统中,哈希算法得到了广泛的使用。
    在区块链系统中,区块之间的链接就是通过区块的哈希值串联起来的。除此以外,还有梅克尔树的生成计算,交易事务的哈希值计算等。
    区块链是一个使用哈希指针构建的链表

  • Merkle tree
    Merkle(默克尔)树,又叫哈希树,是一种典型的二叉树结构,由一个根节点、一组中间节点和一组叶节点组成
    应用场景:
    快速比较大量数据
    快速定位修改
    区块链基础之密码学及安全技术

1.2.1.2椭圆曲线加密算法

即:Elliptic Curve Cryptography,简称ECC,是基于椭圆曲线数学理论实现的一种非对称加密算法。 相比RSA,ECC优势是可以使用更短的密钥,来实现与RSA相当或更高的安全。据研究,160位ECC加密安全性相当于1024位RSA加密,210位ECC加密安全性相当于2048位RSA加密。

1.2.2 安全技术
1.2.2.1 数字签名

用于防止消息篡改和抵赖的场景
数字签名基于非对称加密,既可以用于证实内容的完整性,又同时可以确 认来源(或不可抵赖,Non-Repudiation)。
数字签名的全过程分两大部分,即签名与验证。一侧为签名,一侧为验证 过程。

1.2.2.2 数字证书

区块链基础之密码学及安全技术

1.2.2.3 PKI体系

区块链基础之密码学及安全技术

1.2.2.4 同态加密

本质上,同态加密是指这样一种加密函数,对明文进行环上的加法和乘法运算再加密,与加密后对密文进行相应的运算,结果是等价的。由于这个良好的性质,人们可以委托第三方对数据进行处理而不泄露信息。具有同态性质的加密函数是指两个明文a、b满足Dec(En(a)⊙En(b))=a⊕b的加密函数,其中En是加密运算,Dec是解密运算,⊙、⊕分别对应明文和密文域上的运算。当⊕代表加法时,称该加密为加同态加密:当⊕代表乘法时,称该加密为乘同态加密。

全同态加密是指同时满足加同态和乘同态性质,可以进行任意多次加和乘运算的加密函数。用数学公式来表达,即Dec(f(En(m1),En(m2),…,En(mk)))=f(m1,m2,…,mk),或写成:f(En(m1),En(m2),…,En(mk))=En(f(m1,m2,…,mk)),如果f是任意函数,称为全同态加密。文章来源地址https://www.toymoban.com/news/detail-503020.html

1.2.2.5 布隆过滤器
class BloomHash {

	/**
	 * Hash工具类返回的hashcode的最大长度<br>
	 * maxLength为2的n次方,返回的hashcode为[0,2^n-1]
	 */
	public int maxLength;

	// Hash函数生成哈希码的关键字
	public int seed;

	public BloomHash(int maxLength, int seed) {
		this.maxLength = maxLength;
		this.seed = seed;
	}

	/**
	 * 返回字符串string的hashcode,大小为[0,maxLength-1]
	 * 
	 * @param string
	 * @return
	 */
	public int hashCode(String string) {
		int result = 0;
		// 这个构建hashcode的方式类似于java的string的hashcode方法
		// 只是我这里是可以设置的seed,它那里是31
		for (int i = 0; i < string.length(); i++) {
			char a = string.charAt(i);
			int b = seed * a; // 隐式的把字符转换为整数(ASSIC码)
			result = result + b;
		}
		/**
		 * public static int indexFor(int m, int n){ return m & (n - 1); } public static
		 * void main(String[] args) { System.out.println("19 与 16 求余 = "+ indexFor(19,
		 * 16) ); System.out.println("19 与 16 求余 = "+ 19 % 16 ); }
		 * 此方法中n为2的指数值,则其二进制形式的表示中只存在一个1,其余位都为0, 例如: 0000 1000、0100 0000、0010
		 * 0000等等。则n-1的二进制形式就为1的位数变为0, 其右边位全变为1,例如16的二进制  0001 0000 -1 = 0000
		 * 1111测试m为19的二进制 0001 0011 & 0000 1111 = 0000 0011 = 3,地位保留的结果便是余数。此位运算也是
		 * HashMap中确定元素键(key)值所在哈希数组下标位置的核心方法,此位运算(hash & (length - 1)) 的效率极高于hash %
		 * length的求余, 所以也解释为什么HashMap的扩容始终为2的倍数(2的指数值)。
		 */
		// 保证结果在[0,maxLength-1]:equal to 'result % maxLength'
		return result & (maxLength - 1);
	}
}

public class BloomFilter {

	// 构建hash函数的关键字,总共7个
	private static final int[] HashSeeds = new int[] { 3, 5, 7, 11, 13, 17, 19 };

	// Hash工具类的数组
	private static BloomHash[] HashList = new BloomHash[HashSeeds.length];

	// BloomFilter的长度,最好为插入数量的10倍,目前为2的20次方,大约100万个
	private static final int BloomLength = 1 << 20;

	// 对位的操作类,java自带的BitSet,共BloomLength个bit
	private BitSet bitSet = new BitSet(BloomLength);

	public BloomFilter() {
		// 初始化Hash工具类的数组,每个hash工具类的hash函数都不同
		for (int i = 0; i < HashSeeds.length; i++) {
			HashList[i] = new BloomHash(BloomLength, HashSeeds[i]);
		}
	}

	/**
	 * 在布隆过滤器中加入值value,在多个hash函数生成的hashcode对应的位置上,置1
	 * 
	 * @param value字符串,如果为数字,可以自己转化成string
	 */
	public void addValue(String value) {
		for (int i = 0; i < HashSeeds.length; i++) {
			// 根据对应的hash函数得到hashcode
			int hashcode = HashList[i].hashCode(value);
			// 在位图中,将对应的位,设置为1
			bitSet.set(hashcode);
		}
	}

	/**
	 * 在布隆过滤器中,检验是否可能有值value
	 * 
	 * @param value
	 * @return 如果返回false,则一定没有<br>
	 *         如果返回true,就代表有可能有
	 */
	public boolean existsValue(String value) {
		boolean result = true;
		for (int i = 0; i < HashSeeds.length; i++) {
			// 根据对应的hash函数得到hashcode
			int hashcode = HashList[i].hashCode(value);

			/**
			 * 隐式把boolean转换为整数进行按位与运算 “短路” 主要用于逻辑运算符中,即 “ ! && || "这三种运算符 短路 就是知如果左侧的
			 * 表达式能确定运算后的结果,则不再计算右侧的表达式。 如(1>2)&&(2<3) 明明左侧已经为假 了 我 不用计算右侧我一定知道 此表达是为假
			 */
			// 将result与对应位置上的0或1 做与运算
			// 如果全为1,则result最后为1
			// 如果有一个位置上为0,则最后result为0
			result = result & bitSet.get(hashcode);
		}
		return result;
	}
}

到了这里,关于区块链基础之密码学及安全技术的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 38_安全密码学基础

    在了解安全密码学之前,我们需要补充一些额外知识。 是基于拉丁字母的一套电脑编码系统,就好像这些字符,对应的就是十进制的65 97,简单来说就是计算机没有办法识别字符,他只理解01二进制,所以用一个字符表,规定了什么字符用什么01表示。 PBE(Password Based Encrypt

    2024年01月21日
    浏览(41)
  • 【网络安全】1.4 密码学基础

    密码学是网络安全的核心组成部分,它帮助我们保护信息,防止未经授权的访问。在这篇文章中,我们将从基础开始,深入了解密码学的基本概念和原理,包括加密、解密、密钥、哈希函数等。我们将尽可能使用简单的语言和实例,以便于初学者理解。 密码学是一门研究信息

    2024年02月07日
    浏览(34)
  • 【现代密码学基础】详解完美安全与不可区分安全

    目录 一. 介绍 二. 不可区分性试验 三. 不可区分性与完美安全 四. 例题 五. 小结 敌手完美不可区分,英文写做perfect adversarial indistinguishability,其中adversarial经常被省略不写,在密码学的论文中经常被简称为IND安全。 完美不可区分与香农的完美安全是类似的。该定义来源于一

    2024年01月21日
    浏览(46)
  • 《计算机系统与网络安全》 第四章 密码学基础

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月11日
    浏览(40)
  • 比特币/以太坊/加密货币/网络/区块链/钱包助记词:密码学的角度上,24个单词比12个单词更安全吗

    我们从密码学角度来聊聊助记词。 随着区块链钱包的发展和分层确定性(HD)钱包技术的普及,越来越多的用户开始熟悉了一个叫“助记词”的概念,很多人都已经习惯了从一开始使用一个钱包的时候,就先抄好单词认真保管,并且他们对于助记词的重要性也有了很深刻的理

    2024年02月12日
    浏览(52)
  • 【网络安全】【密码学】【北京航空航天大学】实验三、数论基础(下)【C语言实现】

    1、中国剩余定理(Chinese Remainder Theorem) (1)、算法原理 m1 , m2 , … mk 是一组 两两互素 的正整数,且 M = m1 · m2 · … · mk 为它们的乘积, 则如下的同余方程组: x == a1 (mod m1) x == a2 (mod m2) … x == ak (mod mk) 对于 模M 有唯一的解 x = (M · e1 · a1 / m1 + M · e2 · a2 / m2 + … + M · ek ·

    2024年02月02日
    浏览(34)
  • 区块链--密码学复习概括

    目录 一、密码学需要实现的功能与目标 二、从发展历史角度 三、古典密码学 四、现代密码学 五、密码体制分类 六、密码技术基础 七、非对称密码体制 八、基于证书的公钥分发机制 九、对称与非对称加密体制特性对比 十、RSA算法 十一、数字签名 十二、ECDSA签名算法 十三

    2024年02月03日
    浏览(36)
  • 区块链学习二———密码学原理

    比特币中使用到了密码学的知识,主要是哈希函数与数字签名 哈希碰撞的含义:不同的输入,哈希值是相同的 x≠y,H(x) = H(y) 输入空间较大 输出空间较小,出现哈希碰撞的情况很常见。碰撞是客观存在的。 实际中,靠一个个数试,去找到两个不同的数的哈希值是相同的,几

    2024年02月08日
    浏览(34)
  • 【网络安全】【密码学】【北京航空航天大学】实验二、数论基础(中)【C语言和Java实现】

    1、扩展欧几里得算法(Extended Euclid’s Algorithm) (1)、算法原理 已知整数 a , b ,扩展的欧几里得算法可以在求得 a , b 的 最大公约数 的同时,找到一对整数 x , y ,使得 a , b , x , y 满足如下等式: ax + by = d = gcd(a,b) , 其中 gcd(a, b) 为 a 和 b 的最大公约数。 (2)、算法流程 本算

    2024年02月01日
    浏览(41)
  • 【网络安全】【密码学】【北京航空航天大学】实验一、数论基础(上)【C语言和Java实现】

    1、通过本次实验,熟悉相关的编程环境,为后续的实验做好铺垫; 2、回顾数论学科中的重要基本算法,并加深对其的理解,为本学期密码学理论及实验课程打下良好的基础。 数论主要研究的是整数的运算及性质,许多常用的加密算法都用到了数论知识。 本次实验的实验环

    2024年01月25日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包