主頁 > 區塊鏈 > 區塊鏈基礎之密碼學及安全技術

區塊鏈基礎之密碼學及安全技術

2023-06-25 07:48:30 區塊鏈

1.2 密碼學及安全技術

i區塊鏈中的密碼學與安全技術

1.2.1 密碼學知識

1.2.1.1 Hash函式
  • Hash(哈希)
    哈希函式是一類數學函式,可以在有限合理的時間內,將任意長度的訊息壓縮為
    固定長度的輸出值,并且是不可逆的,其輸出值稱為哈希值,也稱為散列值,
    hash演算法

  • 哈希演算法的應用:
    訊息認證:確保收到的訊息和發送的訊息都是未被篡改的,
    數字簽名:對訊息摘要進行數字簽名與對訊息本身進行數字簽名等效,
    口令的安全性:僅將口令的哈希值進行保存,進行口令檢驗時僅需對比哈希值即可,即使攻擊者獲取了口令的哈希值,也無法計算出口令,
    資料完整性:具有抗資料篡改的能力,

  • Hash函式在區塊鏈中的應用
    在區塊鏈系統中,哈希演算法得到了廣泛的使用,
    在區塊鏈系統中,區塊之間的鏈接就是通過區塊的哈希值串聯起來的,除此以外,還有梅克爾樹的生成計算,交易事務的哈希值計算等,
    區塊鏈是一個使用哈希指標構建的鏈表
    區塊鏈

  • Merkle tree
    Merkle(默克爾)樹,又叫哈希樹,是一種典型的二叉樹結構,由一個根節點、一組中間節點和一組葉節點組成
    應用場景:
    快速比較大量資料
    快速定位修改
    Merkle tree

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體系

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是任意函式,稱為全同態加密,

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;
	}
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/555865.html

標籤:區塊鏈

上一篇:web3產品介紹:mask將Web3的隱私和優勢引入像Facebook和Twitter這樣的社交媒體平臺

下一篇:返回列表

標籤雲
其他(161531) Python(38244) JavaScript(25513) Java(18251) C(15238) 區塊鏈(8272) C#(7972) AI(7469) 爪哇(7425) MySQL(7265) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5875) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4606) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2437) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1984) HtmlCss(1971) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1881) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • 區塊鏈基礎之密碼學及安全技術

    ### 1.2 密碼學及安全技術 ![i區塊鏈中的密碼學與安全技術](https://upload-images.jianshu.io/upload_images/21415382-a06021e50cc209bf.png?imageMogr2/auto-orient/strip%7CimageVi ......

    uj5u.com 2023-06-25 07:48:30 more
  • web3產品介紹:mask將Web3的隱私和優勢引入像Facebook和Twitter這

    介紹: Mask Network是一個開源的瀏覽器擴展,將Web3的隱私和優勢引入像Facebook和Twitter這樣的社交媒體平臺。它是一個功能強大的工具,允許用戶在社交媒體上享受區塊鏈的隱私保護和其他Web3的好處。讓我們一起探索Mask Network的主要特點和為用戶帶來的益處。 主要特點 ......

    uj5u.com 2023-06-16 07:51:36 more
  • web3 產品介紹:Decentraland:開啟你的虛擬現實區塊鏈游戲之旅

    Decentraland(https://decentraland.org/)是一款基于區塊鏈技術的虛擬現實游戲,它將去中心化的概念引入游戲世界,為玩家提供了一個創造、互動和探索的虛擬空間。在Decentraland中,你可以擁有自己的虛擬土地,創建和交易虛擬資產,并與其他玩家進行社互動動。讓我們一 ......

    uj5u.com 2023-06-06 09:23:28 more
  • windows 以太坊開發框架Truffle環境搭建

    **一、安裝DApp開發環境**1. * 1.1 安裝Node.js 我們使用官方長期支持的8.10.0LTS版本,下載64位包裝包。 下載后直接安裝即可。安裝完畢,打開一個控制臺視窗,可以使用node了: ``` C:\Users\Administrator> node -v v8.10.0 `` ......

    uj5u.com 2023-06-02 08:31:32 more
  • web3 產品介紹:Mirror.xyz是一個創新的去中心化出版平臺

    Mirror.xyz是一個創新的去中心化出版平臺,它使作者能夠創建、發布和管理自己的內容,并與讀者建立直接的經濟聯系。在本文中,我們將介紹Mirror.xyz的主要特點、功能以及如何使用它來發布和消費內容。 一、Mirror.xyz的特點 去中心化出版:Mirror.xyz采用去中心化的方式,將權力 ......

    uj5u.com 2023-05-24 08:26:16 more
  • web3 產品介紹 etherscan 區塊鏈瀏覽器 將抽象的資料和理論可視

    Etherscan是一個廣泛使用的以太坊區塊鏈瀏覽器和分析平臺,它為用戶提供了全面的區塊鏈資料查詢和交易分析功能。在本文中,我們將介紹Etherscan的主要特點和功能,以及如何使用它來瀏覽以太坊區塊鏈。 一、Etherscan的特點 區塊鏈瀏覽器:Etherscan提供了完整的以太坊區塊鏈瀏覽器, ......

    uj5u.com 2023-05-16 12:04:37 more
  • Remix-Ethereum IDE連接本地詳解

    Remix-Ethereum IDE連接本地 ? 由于在學習和做專案的程序中,很多人用的都是網頁版的Remix,而在網頁中的代碼是存盤在快取中的,在使用程序中容易丟失,所以將Remix與本地檔案連接起來,能夠有效防止代碼丟失。 ? 在安裝remix之前,需要先安裝node。 1.安裝Remix ? ......

    uj5u.com 2023-05-16 12:04:26 more
  • Hardhat 開發框架 - Solidity開發教程連載

    Decert.me 要連載教程了, 《Solidity 開發教程》 力求系統、深入的介紹 Solidity 開發, 同時這是一套互動式教程,你可以實時的修改教程里的合約代碼并運行。 本教程來自貢獻者 @Tiny熊,讓我們正式開始學習吧。 如果你已經是 Hardhat 的使用者,可以直接跳到文末,參與 ......

    uj5u.com 2023-05-12 08:33:27 more
  • 波場(Tron) 網頁版錢包開源

    之前做區塊鏈專案太難了,很多組件、工具沒有開源專案,需要自己寫很麻煩。 我整理了幾個自己給公司開發專案的時候,分離出來的幾個工具,已經上傳到 Gihub 了,感覺瀏覽量還行,在這里給園子里的朋友分享下。 1、本地網頁版本錢包: 為了方便管理專案里所有用戶的私鑰,用一套助記詞派生出所有私鑰,這樣每個用 ......

    uj5u.com 2023-05-11 07:39:44 more
  • LP三明治機器人

    2022 年 11 月 4 日,EigenPhi檢測到一種全新型別的三明治交易:一個三明治機器人擠壓了一筆增加流動性的交易,根據我們的常識,這很奇怪。這樣做有利可圖嗎?有什么限制嗎?與之前關于包括 37 筆交易的巨大三明治交易的文章不同,該機器人展示了一種截然不同的創新策略。而本文將帶你一探AMM旗 ......

    uj5u.com 2023-05-10 07:52:55 more