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

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

2023-06-25 07:50:47 其他

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/qita/555874.html

標籤:其他

上一篇:淺談OpenCV的多物件匹配影像的實作,以及如何匹配半透明控制元件,不規則影像

下一篇:返回列表

標籤雲
其他(161540) 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)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 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:50:47 more
  • 淺談OpenCV的多物件匹配影像的實作,以及如何匹配半透明控制元件,不

    # 淺談OpenCV的多物件匹配透明影像的實作,以及如何匹配半透明控制元件 ### 引子 > 1. OpenCV提供的templateMatch只負責將(相關性等)計算出來,并不會直接提供目標的對應坐標,一般來說我們直接遍歷最高的相關度,就可以得到匹配度最高的坐標。但是這樣一般只能得到一個坐標。 > 2 ......

    uj5u.com 2023-06-25 07:50:39 more
  • TVM 原始碼閱讀PASS — VectorizeLoop

    本文地址:https://www.cnblogs.com/wanger-sjtu/p/17501119.html VectorizeLoop這個PASS就是對標記為`ForKind::kVectorized`的`For`回圈做向量化處理,并對For回圈中的陳述句涉及到的變數,替換為`Ramp`,以便于 ......

    uj5u.com 2023-06-25 07:50:27 more
  • 怎么讓英文大預言模型支持中文?(一)構建自己的tokenization

    代碼地址:https://github.com/taishan1994/sentencepiece_chinese_bpe Part1前言 目前,大語言模型呈爆發式的增長,其中,基于llama家族的模型占據了半壁江山。而原始的llama模型對中文的支持不太友好,接下來本文將講解如何去擴充vocab里 ......

    uj5u.com 2023-06-25 07:50:22 more
  • vulnhub靶場搭建

    # vulnhub靶場搭建 ## kali虛擬機安裝 ### 1、更新 sudo apt-get update ![image](https://img2023.cnblogs.com/blog/2988012/202305/2988012-20230519234458164-417900736.p ......

    uj5u.com 2023-06-25 07:49:38 more
  • TVM 原始碼閱讀PASS — VectorizeLoop

    本文地址:https://www.cnblogs.com/wanger-sjtu/p/17501119.html VectorizeLoop這個PASS就是對標記為`ForKind::kVectorized`的`For`回圈做向量化處理,并對For回圈中的陳述句涉及到的變數,替換為`Ramp`,以便于 ......

    uj5u.com 2023-06-25 07:49:23 more
  • 怎么讓英文大預言模型支持中文?(一)構建自己的tokenization

    代碼地址:https://github.com/taishan1994/sentencepiece_chinese_bpe Part1前言 目前,大語言模型呈爆發式的增長,其中,基于llama家族的模型占據了半壁江山。而原始的llama模型對中文的支持不太友好,接下來本文將講解如何去擴充vocab里 ......

    uj5u.com 2023-06-25 07:49:18 more
  • 【技識訓累】演算法中的貪心演算法【三】

    博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ......

    uj5u.com 2023-06-25 07:48:47 more
  • AtCoder Beginner Contest 307

    ## [A - Weekly Records (abc307 A)](https://atcoder.jp/contests/abc307/tasks/abc307_a) ### 題目大意 給定$n$周每天的散步量,求每周七天的散步量的和。 ### 解題思路 累計求和即可。 神奇的代碼 ```cpp ......

    uj5u.com 2023-06-25 07:48:42 more
  • 淺談OpenCV的多物件匹配影像的實作,以及如何匹配半透明控制元件,不

    # 淺談OpenCV的多物件匹配透明影像的實作,以及如何匹配半透明控制元件 ### 引子 > 1. OpenCV提供的templateMatch只負責將(相關性等)計算出來,并不會直接提供目標的對應坐標,一般來說我們直接遍歷最高的相關度,就可以得到匹配度最高的坐標。但是這樣一般只能得到一個坐標。 > 2 ......

    uj5u.com 2023-06-25 07:42:42 more