① 現代密碼學介紹(一)
1.Kerckhoff's principle:
加密方法不必要求是保密的,它肯定會很容易就落入敵人的手中。安全性僅僅依靠key的安全性。
支持上述principle的三個基本理論:
(1)無論對於哪一方來說,保持一個短的key的安全性比保持加密演算法的安全性要簡單得多。
(2)當信息被暴露時,改變一個key比替換一個加密模式要簡單。
(3)用戶們一起使用相同的加密演算法好過用戶自己使用它們自己的加密演算法。
2.通過利用英文的統計模型,可以攻擊單字母替換密碼:(暴力攻擊需要26次)
(1)如果e映射為D,則每個在明文中出現的e都會在密文中顯示為D。
(2)每個英文字母出現的頻率分布是已知的。
3.移位密碼的改進版攻擊方法:
(1)將26個字母與數字0~25一一對應,設pi為第i個字母出現的頻率(確定的),0<= pi <=1。由Figure 1.3 給出以下式子:
(2)得到一些密文後,設qi為第i個字母在密文中出現的頻率(第i個字母出現的次數除以密文長度)。
(3)設key為k,則pi=
,因為第i個字母被映射到第(i+k)個字母。
(4)設 j ∈{0,...,25} ,對於 j 可能取到的這26個值,分別計算下列式子:
(5)當找到Ik = 0.065,則可得到key的值k。
4.破解多字母移位密碼(維吉尼亞密碼): (當key長度為t時,暴力攻擊需要 26t 次)
吉尼亞密碼分解後實則就是多個凱撒密碼,只要知道密鑰的長度,我們就可以將其分解。
如密文為:ABCDEFGHIJKLMN
如果我們知道密鑰長度為3,就可將其分解為三組:
組1:A D G J M (密文中第 0, 3,6,9,12 個字母)
組2:B E H K N (密文中第 1,4,7,10,13 個字母)
組3:C F I L (密文中第 2,5,8,11 個字母)
分解後每組就是一個凱撒密碼,即組內的位移量是一致的,對每一組即可用頻度分析法來解密。
所以破解維吉尼亞密碼的關鍵就是確定密鑰的長度。
當不知道key的長度時。
(1)設key的長度為t,以下字元有相同的位移量
(2)設qi為第i個字母在上面字元串中出現的頻率(第i個字母出現的次數除以字元串長度)。
(3)設位移量為j,則
(4)設
(左邊這個變數包含了我們要求的key的長度t ,我們從1開始試t的值)
由(1)我們可知
有相同的位移量。接著我們計算下列式子,找出符合式子的t值:
(5)當T不是key的長度t時,則我們期望每個qi的頻率都是1/26
※ 維吉尼亞密碼、單字母替換密碼比對移位密碼的攻擊需要更長的密文。
5.如今,schemes(方案)被以一種更系統的方式發展和分析,並最終用來給出嚴格proof(證據)證明給出的construction(結構)是安全的。為了清晰表達這些proofs,我們首先要正式定義「安全」的含義,結果是,大多數密碼證明依賴於目前未經證實的假設,這些假設關於某些數學問題的演算法難度。
6.比起古典密碼學,現代密碼學更強調3個規則(principles):定義、假設和證明(definitions, assumptions, and proofs)。
(1)Formal definitions:給出兩個准確的描述:在這個范圍內威脅有哪些、什麼樣的安全保障是被需要的。這樣,definitions能夠幫助引導加密方案(cryptographic schemes)的設計。在合適的definition下,我們可以研究一個被推薦的方案去看它是否完成需求保障;某些情況下,我們還可以通過展示滿足definition證明一個給出的結構的安全。
一個滿足更弱定義的方案可能會比滿足更強定義的方案更有效。
(2)一個安全定義有兩個元素:一個安全保障(從攻擊者的觀點來看,什麼對該方案(scheme)構成成功的攻擊,即scheme旨在預防攻擊者的行動);一個威脅的模型(描述敵手的能力)。
(3)威脅模型假定攻擊者擁有的能力,但對敵手使用的策略沒有限制,不用假定敵手是怎麼使用它的能力的。
(4)威脅模型,按順序,攻擊者的能力增加:唯密文攻擊、已知明文攻擊、選擇明文攻擊、選擇密文攻擊。
(5)Precise Assumptions:安全證明(proofs)經常依賴於假設(assumptions)。
(6)如果被視為建築塊的基本假設,作為方案安全證明的部分是明確的,接著我們只需檢查要求的假設是否被新弱點影響。
(7)Proofs and Security: 嚴格的證明:在某些特定的假設(assumption)下,一個構造(construction)滿足給出的定義(definition)。
② 現代密碼學加密原理
密碼學是在區塊鏈技術中承擔著非常重要的角色,但其實,在互聯網中,也大量的使用著密碼學的技術,本文將介紹現代密碼學中的早期加密方法,這將有助於我們理解區塊鏈中的復雜演算法。
第二次大戰之後,從軍方演化而來的互聯網慢慢的進入了尋常百姓家,我們能夠將一切事物都電子化處理,交易也不例外,於是電子銀行也出現了,所有交易都可以通過網路進行。隨著互聯網用戶越來越多,新的問題產生了,加密需要雙方共享一個秘密的隨機數,也就是秘鑰,但從未謀面的兩個人,如何就此共享密鑰達成一致,而又不讓第三方監聽這知道呢?這將是現代密碼學的目標。
1976年,維特菲爾德和馬丁赫爾曼找到了一種巧妙的解決方法,讓我們用顏色為比喻來講解該技巧是如何實現的:
首先,明確我們的目標,發送者和接受者就秘密顏色達成一致,而不讓竊聽者知道,於是需要採用一種技巧,該技巧基於兩點:
一、混合兩種顏色得到第三種顏色很容易;
二、得到這種混合色後,想在此基礎上知道原來的顏色就很難了, 這就是鎖的原理。
朝一個方向容易,朝反方向難,這被稱作是單向函數。解決方案是這樣的,首先,他們公開對某種顏色達成一致,假設是黃色,然後發送者和接收者隨機選取私有顏色,混到公共的黃色中,從而掩飾掉他們的私有顏色,並且將混合顏色發給接收者,接收者知道自己的私有顏色,並將它的混合顏色發給發送者,
然後就是技巧的關鍵了,發送者和接收者將各自私有顏色加入到另一個人的混合色中,然後得到一種共享秘密顏色,此時,竊聽者無法確定這種顏色,她必須有一種私有顏色才能確定,技巧就是這樣,對密碼學的世界中, 我們需要一個數值的運算過程,這個過程向單一方向很容易,反方向會很難。
我們需要一種朝一方向易,反方向難的數值過程,於是密碼學家找到了模算數,也就是取余的函數,(比如46除12的余數是10)。
假設我們考慮用質數做模型,比如17,我們找到17的一個原根,這里是3,它具有如下重要性質,取不同冪次時,結果會在時鍾上均勻分布,3是一個生成元,取3的X次方,結果會等可能地出現在0和17中間任何整數上。
但相反的過程就難了,比如給定12,要求這是3的多少次方,這被稱為離散對數問題,這樣我們就有了單向函數,一個方向計算很容易,但反方向就很難了,已知12,我們只能採用試錯法,求出匹配的質數。
這有多難呢?如果數字很小,這還很容易,但模數是長達數百位的質數,那麼,想解密是不切實際的,即便藉助世界上最強大的計算機,要遍歷所有可能的情況,也需要上千年的時間,單向函數的強度取決於反向過程所需要的時間。
解決方案是這樣的,首先,發送者和接收者公開質模數和生成元,這里的例子中也就是17和3,然後發送者選擇一個私有的隨機數,比如15,計算315 mod 17(結果為6),然後公開將此結果發送給接收者,之後接收者選擇自己的私有隨機數,比如13,計算313mod 17(結果為12),然後公開將此結果發送給對方。
關鍵在於,將接收者的公開結果,取她的私有數字次方,以獲得共享密鑰,這里是10,接收者將發送者的公開結果,取她的私有數字次方,結果得到相同的共享密鑰,可能大家還不好理解,但他們實際上進行了相同的運算。
考慮發送者,她從接收者接收到的是12,來自313 mod 17,所以她的計算實際上是3∧13∧15 mod 17,而接收者,他從發送者那裡接收6,來自315mod17,所以他的計算實際上是3∧15∧13mod17,兩種計算結果是相同的,只是指數的順序不同,調換指數順序,結果不會改變,他們的結果都是,3取兩人私有數字次冪,沒有這些私有數字,15或13,第三方將無法求出結果。
第三方會被困在離散對數問題之中,數字足夠大時,實踐中,她在合理時限內,幾乎不可能破解,這就解決了交換密鑰的問題,這可以同偽隨機數生成器結合使用,為從未謀面的人提供通信加密。
現在區塊鏈常用的演算法,如sha256,都是繼承單向函數的設計思維,一個方向計算容易,反過來幾乎不能破解,來保證安全。
③ 現代密碼學的仿射變換中的解密演算法怎麼求模,(1/7)*(11-21)(mod 26)=6是怎麼求出來的的
(11-21)/7
7*m+10(mod26)
7*6+10(mod26) = 2
m=6
④ 密碼演算法的密碼學
(1) 發送者和接收者
假設發送者想發送消息給接收者,且想安全地發送信息:她想確信偷聽者不能閱讀發送的消息。
(2) 消息和加密
消息被稱為明文。用某種方法偽裝消息以隱藏它的內容的過程稱為加密,加了密的消息稱為密文,而把密文轉變為明文的過程稱為解密。
明文用M(消息)或P(明文)表示,它可能是比特流(文本文件、點陣圖、數字化的語音流或數字化的視頻圖像)。至於涉及到計算機,P是簡單的二進制數據。明文可被傳送或存儲,無論在哪種情況,M指待加密的消息。
密文用C表示,它也是二進制數據,有時和M一樣大,有時稍大(通過壓縮和加密的結合,C有可能比P小些。然而,單單加密通常達不到這一點)。加密函數E作用於M得到密文C,用數學表示為:
E(M)=C.
相反地,解密函數D作用於C產生M
D(C)=M.
先加密後再解密消息,原始的明文將恢復出來,下面的等式必須成立:
D(E(M))=M
(3) 鑒別、完整性和抗抵賴
除了提供機密性外,密碼學通常有其它的作用:.
(a) 鑒別
消息的接收者應該能夠確認消息的來源;入侵者不可能偽裝成他人。
(b) 完整性檢驗
消息的接收者應該能夠驗證在傳送過程中消息沒有被修改;入侵者不可能用假消息代替合法消息。
(c) 抗抵賴
發送者事後不可能虛假地否認他發送的消息。
(4) 演算法和密鑰
密碼演算法也叫密碼,是用於加密和解密的數學函數。(通常情況下,有兩個相關的函數:一個用作加密,另一個用作解密)
如果演算法的保密性是基於保持演算法的秘密,這種演算法稱為受限制的演算法。受限制的演算法具有歷史意義,但按現在的標准,它們的保密性已遠遠不夠。大的或經常變換的用戶組織不能使用它們,因為每有一個用戶離開這個組織,其它的用戶就必須改換另外不同的演算法。如果有人無意暴露了這個秘密,所有人都必須改變他們的演算法。
但是,受限制的密碼演算法不可能進行質量控制或標准化。每個用戶組織必須有他們自己的唯一演算法。這樣的組織不可能採用流行的硬體或軟體產品。但竊聽者卻可以買到這些流行產品並學習演算法,於是用戶不得不自己編寫演算法並予以實現,如果這個組織中沒有好的密碼學家,那麼他們就無法知道他們是否擁有安全的演算法。
盡管有這些主要缺陷,受限制的演算法對低密級的應用來說還是很流行的,用戶或者沒有認識到或者不在乎他們系統中內在的問題。
現代密碼學用密鑰解決了這個問題,密鑰用K表示。K可以是很多數值里的任意值。密鑰K的可能值的范圍叫做密鑰空間。加密和解密運算都使用這個密鑰(即運算都依賴於密鑰,並用K作為下標表示),這樣,加/解密函數現在變成:
EK(M)=C
DK(C)=M.
這些函數具有下面的特性:
DK(EK(M))=M.
有些演算法使用不同的加密密鑰和解密密鑰,也就是說加密密鑰K1與相應的解密密鑰K2不同,在這種情況下:
EK1(M)=C
DK2(C)=M
DK2 (EK1(M))=M
所有這些演算法的安全性都基於密鑰的安全性;而不是基於演算法的細節的安全性。這就意味著演算法可以公開,也可以被分析,可以大量生產使用演算法的產品,即使偷聽者知道你的演算法也沒有關系;如果他不知道你使用的具體密鑰,他就不可能閱讀你的消息。
密碼系統由演算法、以及所有可能的明文、密文和密鑰組成的。
基於密鑰的演算法通常有兩類:對稱演算法和公開密鑰演算法。下面將分別介紹: 對稱演算法有時又叫傳統密碼演算法,就是加密密鑰能夠從解密密鑰中推算出來,反過來也成立。在大多數對稱演算法中,加/解密密鑰是相同的。這些演算法也叫秘密密鑰演算法或單密鑰演算法,它要求發送者和接收者在安全通信之前,商定一個密鑰。對稱演算法的安全性依賴於密鑰,泄漏密鑰就意味著任何人都能對消息進行加/解密。只要通信需要保密,密鑰就必須保密。
對稱演算法的加密和解密表示為:
EK(M)=C
DK(C)=M
對稱演算法可分為兩類。一次只對明文中的單個比特(有時對位元組)運算的演算法稱為序列演算法或序列密碼。另一類演算法是對明文的一組比特亞行運算,這些比特組稱為分組,相應的演算法稱為分組演算法或分組密碼。現代計算機密碼演算法的典型分組長度為64比特——這個長度大到足以防止分析破譯,但又小到足以方便使用(在計算機出現前,演算法普遍地每次只對明文的一個字元運算,可認為是序列密碼對字元序列的運算)。 公開密鑰演算法(也叫非對稱演算法)是這樣設計的:用作加密的密鑰不同於用作解密的密鑰,而且解密密鑰不能根據加密密鑰計算出來(至少在合理假定的長時間內)。之所以叫做公開密鑰演算法,是因為加密密鑰能夠公開,即陌生者能用加密密鑰加密信息,但只有用相應的解密密鑰才能解密信息。在這些系統中,加密密鑰叫做公開密鑰(簡稱公鑰),解密密鑰叫做私人密鑰(簡稱私鑰)。私人密鑰有時也叫秘密密鑰。為了避免與對稱演算法混淆,此處不用秘密密鑰這個名字。
用公開密鑰K加密表示為
EK(M)=C.
雖然公開密鑰和私人密鑰是不同的,但用相應的私人密鑰解密可表示為:
DK(C)=M
有時消息用私人密鑰加密而用公開密鑰解密,這用於數字簽名(後面將詳細介紹),盡管可能產生混淆,但這些運算可分別表示為:
EK(M)=C
DK(C)=M
當前的公開密碼演算法的速度,比起對稱密碼演算法,要慢的多,這使得公開密碼演算法在大數據量的加密中應用有限。 單向散列函數 H(M) 作用於一個任意長度的消息 M,它返回一個固定長度的散列值 h,其中 h 的長度為 m 。
輸入為任意長度且輸出為固定長度的函數有很多種,但單向散列函數還有使其單向的其它特性:
(1) 給定 M ,很容易計算 h ;
(2) 給定 h ,根據 H(M) = h 計算 M 很難 ;
(3) 給定 M ,要找到另一個消息 M『 並滿足 H(M) = H(M』) 很難。
在許多應用中,僅有單向性是不夠的,還需要稱之為「抗碰撞」的條件:
要找出兩個隨機的消息 M 和 M『,使 H(M) = H(M』) 滿足很難。
由於散列函數的這些特性,由於公開密碼演算法的計算速度往往很慢,所以,在一些密碼協議中,它可以作為一個消息 M 的摘要,代替原始消息 M,讓發送者為 H(M) 簽名而不是對 M 簽名 。
如 SHA 散列演算法用於數字簽名協議 DSA中。 提到數字簽名就離不開公開密碼系統和散列技術。
有幾種公鑰演算法能用作數字簽名。在一些演算法中,例如RSA,公鑰或者私鑰都可用作加密。用你的私鑰加密文件,你就擁有安全的數字簽名。在其它情況下,如DSA,演算法便區分開來了??數字簽名演算法不能用於加密。這種思想首先由Diffie和Hellman提出 。
基本協議是簡單的 :
(1) A 用她的私鑰對文件加密,從而對文件簽名。
(2) A 將簽名的文件傳給B。
(3) B用A的公鑰解密文件,從而驗證簽名。
這個協議中,只需要證明A的公鑰的確是她的。如果B不能完成第(3)步,那麼他知道簽名是無效的。
這個協議也滿足以下特徵:
(1) 簽名是可信的。當B用A的公鑰驗證信息時,他知道是由A簽名的。
(2) 簽名是不可偽造的。只有A知道她的私鑰。
(3) 簽名是不可重用的。簽名是文件的函數,並且不可能轉換成另外的文件。
(4) 被簽名的文件是不可改變的。如果文件有任何改變,文件就不可能用A的公鑰驗證。
(5) 簽名是不可抵賴的。B不用A的幫助就能驗證A的簽名。 加密技術是對信息進行編碼和解碼的技術,編碼是把原來可讀信息(又稱明文)譯成代碼形式(又稱密文),其逆過程就是解碼(解密)。加密技術的要點是加密演算法,加密演算法可以分為對稱加密、不對稱加密和不可逆加密三類演算法。
對稱加密演算法 對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,數據發信方將明文(原始數據)和加密密鑰一起經過特殊加密演算法處理後,使其變成復雜的加密密文發送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的密鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文。在對稱加密演算法中,使用的密鑰只有一個,發收信雙方都使用這個密鑰對數據進行加密和解密,這就要求解密方事先必須知道加密密鑰。對稱加密演算法的特點是演算法公開、計算量小、加密速度快、加密效率高。不足之處是,交易雙方都使用同樣鑰匙,安全性得不到保證。此外,每對用戶每次使用對稱加密演算法時,都需要使用其他人不知道的惟一鑰匙,這會使得發收信雙方所擁有的鑰匙數量成幾何級數增長,密鑰管理成為用戶的負擔。對稱加密演算法在分布式網路系統上使用較為困難,主要是因為密鑰管理困難,使用成本較高。在計算機專網系統中廣泛使用的對稱加密演算法有DES和IDEA等。美國國家標准局倡導的AES即將作為新標准取代DES。
不對稱加密演算法 不對稱加密演算法使用兩把完全不同但又是完全匹配的一對鑰匙—公鑰和私鑰。在使用不對稱加密演算法加密文件時,只有使用匹配的一對公鑰和私鑰,才能完成對明文的加密和解密過程。加密明文時採用公鑰加密,解密密文時使用私鑰才能完成,而且發信方(加密者)知道收信方的公鑰,只有收信方(解密者)才是唯一知道自己私鑰的人。不對稱加密演算法的基本原理是,如果發信方想發送只有收信方才能解讀的加密信息,發信方必須首先知道收信方的公鑰,然後利用收信方的公鑰來加密原文;收信方收到加密密文後,使用自己的私鑰才能解密密文。顯然,採用不對稱加密演算法,收發信雙方在通信之前,收信方必須將自己早已隨機生成的公鑰送給發信方,而自己保留私鑰。由於不對稱演算法擁有兩個密鑰,因而特別適用於分布式系統中的數據加密。廣泛應用的不對稱加密演算法有RSA演算法和美國國家標准局提出的DSA。以不對稱加密演算法為基礎的加密技術應用非常廣泛。
不可逆加密演算法 的特徵是加密過程中不需要使用密鑰,輸入明文後由系統直接經過加密演算法處理成密文,這種加密後的數據是無法被解密的,只有重新輸入明文,並再次經過同樣不可逆的加密演算法處理,得到相同的加密密文並被系統重新識別後,才能真正解密。顯然,在這類加密過程中,加密是自己,解密還得是自己,而所謂解密,實際上就是重新加一次密,所應用的「密碼」也就是輸入的明文。不可逆加密演算法不存在密鑰保管和分發問題,非常適合在分布式網路系統上使用,但因加密計算復雜,工作量相當繁重,通常只在數據量有限的情形下使用,如廣泛應用在計算機系統中的口令加密,利用的就是不可逆加密演算法。近年來,隨著計算機系統性能的不斷提高,不可逆加密的應用領域正在逐漸增大。在計算機網路中應用較多不可逆加密演算法的有RSA公司發明的MD5演算法和由美國國家標准局建議的不可逆加密標准SHS(Secure Hash Standard:安全雜亂信息標准)等。
⑤ NJUPT《 現代密碼學 》
(有些計算錯誤懶得改了,方法都是對的)
2) Caesar 密碼 :26個英文字母與整數0~25對應,Caesar 密碼密鑰數量過少。
將Caesar 密碼一般化,取任意的整數k作為密鑰:
加密變換:c = E(k,p) = (p+k)(mod26)
解密變換:p = D(k,c) = (c-k)(mod26)
一般單表替代密碼演算法特點:
① 密鑰空間K很大,|K| = 26!
② 移位密碼是替換密碼的一個特例,它僅含26個置換做為密鑰空間。
③ 密鑰n不便記憶,通常會採用密鑰短語密碼:選用英文短語或單詞串作為密鑰,去掉其中重復的字母,其它字母依次寫於此字母串後,就可構造出一個字母替代表。
3) 仿射密碼 :一種線性變換。仿射密碼的明文空間和密文空間與移位密碼相同,但密鑰空間為 K = {(k1,k2)|k1,k2∈Z₂₆,gcd(k1,26) = 1};
對任意 m∈M,c∈C,k = (k1,k2)∈K,定義加密變換和解密變換為:
c = ek(m) = k1m+k2 (mod26)
m = dk(c) = k1^-1(c-k2) (mod26)
⑥ 區塊鏈中現代密碼學
1983年 - David Chaum描述的盲簽
1997年 - Adam Back發明的HashCash(工作證明制度的一個例子)
2001年 - Ron Rivest,Adi Shamir和Yael Tauman向加密社區提出了環簽名
2004年 - Patrick P. Tsang和Victor K.提出使用環簽名系統進行投票和電子現金;
2008年 - 由Satoshi Nakamoto出版的Bitcoin白皮書
2011年 - 比特幣系統中的匿名分析,Fergal Reid和Martin Harrigan
2012 - 目的地址比特幣匿名(CryptoNote中的一次性地址)。
安全多方計算起源於1982年姚期智的百萬富翁問題。後來Oded Goldreich有比較細致系統的論述。
姚氏百萬富翁問題是由華裔計算機科學家、圖靈獎獲得者姚啟智教授首先提出的。該問題表述為:兩個百萬富翁Alice和Bob想知道他們兩個誰更富有,但他們都不想讓對方知道自己財富的任何信息。該問題有一些實際應用:假設Alice希望向Bob購買一些商品,但她願意支付的最高金額為x元;Bob希望的最低賣出價為y元。Alice和Bob都非常希望知道x與y哪個大。如果x>y,他們都可以開始討價還價;如果z<y,他們就不用浪費口舌。但他們都不想告訴對方自己的出價,以免自己在討價還價中處於不利地位。
該方案用於對兩個數進行比較,以確定哪一個較大。Alice知道一個整數i;Bob知道一個整數j, Alice與B0b希望知道究竟i>=j還是j>i,但都不想讓對方知道自己的數。為簡單起見,假設j與i的范圍為[1,100】。Bob有一個公開密鑰Eb和私有密鑰Db。
安全多方計算(Secure Multi-Party Computation)的研究主要是針對無可信第三方的情況下, 如何安全地計算一個約定函數的問題. 安全多方計算在電子選舉、電子投票、電子拍賣、秘密共享、門限簽名等場景中有著重要的作用。
同態加密(Homomorphic Encryption)是很久以前密碼學界就提出來的一個Open Problem。早在1978年,Ron Rivest, Leonard Adleman, 以及Michael L. Dertouzos就以銀行為應用背景提出了這個概念[RAD78]。對,你沒有看錯,Ron Rivest和Leonard Adleman分別就是著名的RSA演算法中的R和A。
什麼是同態加密?提出第一個構造出全同態加密(Fully Homomorphic Encryption)[Gen09]的Craig Gentry給出的直觀定義最好:A way to delegate processing of your data, without giving away access to it.
這是什麼意思呢?一般的加密方案關注的都是數據存儲安全。即,我要給其他人發個加密的東西,或者要在計算機或者其他伺服器上存一個東西,我要對數據進行加密後在發送或者存儲。沒有密鑰的用戶,不可能從加密結果中得到有關原始數據的任何信息。只有擁有密鑰的用戶才能夠正確解密,得到原始的內容。我們注意到,這個過程中用戶是不能對加密結果做任何操作的,只能進行存儲、傳輸。對加密結果做任何操作,都將會導致錯誤的解密,甚至解密失敗。
同態加密方案最有趣的地方在於,其關注的是數據處理安全。同態加密提供了一種對加密數據進行處理的功能。也就是說,其他人可以對加密數據進行處理,但是處理過程不會泄露任何原始內容。同時,擁有密鑰的用戶對處理過的數據進行解密後,得到的正好是處理後的結果。
有點抽象?我們舉個實際生活中的例子。有個叫Alice的用戶買到了一大塊金子,她想讓工人把這塊金子打造成一個項鏈。但是工人在打造的過程中有可能會偷金子啊,畢竟就是一克金子也值很多錢的說… 因此能不能有一種方法,讓工人可以對金塊進行加工(delegate processing of your data),但是不能得到任何金子(without giving away access to it)?當然有辦法啦,Alice可以這么做:Alice將金子鎖在一個密閉的盒子裡面,這個盒子安裝了一個手套。工人可以帶著這個手套,對盒子內部的金子進行處理。但是盒子是鎖著的,所以工人不僅拿不到金塊,連處理過程中掉下的任何金子都拿不到。加工完成後。Alice拿回這個盒子,把鎖打開,就得到了金子。
這裡面的對應關系是:盒子:加密演算法盒子上的鎖:用戶密鑰將金塊放在盒子裡面並且用鎖鎖上:將數據用同態加密方案進行加密加工:應用同態特性,在無法取得數據的條件下直接對加密結果進行處理開鎖:對結果進行解密,直接得到處理後的結果同態加密哪裡能用?這幾年不是提了個雲計算的概念嘛。同態加密幾乎就是為雲計算而量身打造的!我們考慮下面的情景:一個用戶想要處理一個數據,但是他的計算機計算能力較弱。這個用戶可以使用雲計算的概念,讓雲來幫助他進行處理而得到結果。但是如果直接將數據交給雲,無法保證安全性啊!於是,他可以使用同態加密,然後讓雲來對加密數據進行直接處理,並將處理結果返回給他。這樣一來:用戶向雲服務商付款,得到了處理的結果;雲服務商掙到了費用,並在不知道用戶數據的前提下正確處理了數據;
聚合簽名由Boneh等人提出,主要是通過聚合多個簽名為一個簽名,來提高簽名與驗證的效率。要對多個用戶的數據進行簽名,聚合簽名能夠極大地降低簽名計算復雜度。CL就是聚合簽名。
零知識證明過程有兩個參與方,一方叫證明者,一方叫驗證者。證明者掌握著某個秘密,他想讓驗證者相信他掌握著秘密,但是又不想泄漏這個秘密給驗證者。
雙方按照一個協議,通過一系列交互,最終驗證者會得出一個明確的結論,證明者是或不掌握這個秘密。
對於比特幣的例子,一筆轉帳交易合法與否,其實只要證明三件事:
發送的錢屬於發送交易的人
發送者發送的金額等於接收者收到金額
發送者的錢確實被銷毀了
整個證明過程中,礦工其實並不關心具體花掉了多少錢,發送者具體是誰,接受者具體是誰。礦工只關心系統的錢是不是守恆的。
zcash 就是用這個思路實現了隱私交易。
零知識證明的三條性質對應:
(1)完備性。如果證明方和驗證方都是誠實的,並遵循證明過程的每一步,進行正確的計算,那麼這個證明一定是成功的,驗證方一定能夠接受證明方。
(2)合理性。沒有人能夠假冒證明方,使這個證明成功。
(3)零知識性。證明過程執行完之後,驗證方只獲得了「證明方擁有這個知識」這條信息,而沒有獲得關於這個知識本身的任何一點信息。
只有環成員,沒有管理者,不需要環成員之間的合作,簽名者利用自己的私鑰和集合中其他成員的公鑰就能獨立的進行簽名,不需要其他人的幫助,集合中的其他成員可能不知道自己被包含在了其中。
環簽名可以被用作成一種泄露秘密的方式,例如,可以使用環形簽名來提供來自「白宮高級官員」的匿名簽名,而不會透露哪個官員簽署了該消息。 環簽名適用於此應用程序,因為環簽名的匿名性不能被撤銷,並且因為用於環簽名的組可以被即興創建。
1)密鑰生成。為環中每個成員產生一個密鑰對(公鑰PKi,私鑰SKi)
2)簽名。簽名者用自己的私鑰和任意n個環成員的公鑰為消息m生成簽名a
3)簽名驗證。簽名者根據環簽名和消息m,驗證簽名是否是環中成員所簽。如果有效就接收,如果無效就丟棄。
群簽名的一般流程
盲數字簽名(Blind Signature)簡稱盲簽名——是一種數字簽名的方式,在消息內容被簽名之前,對於簽名者來說消息內容是不可見的。1982年大衛·喬姆首先提出了盲簽名的概念。盲簽名因為具有盲性這一特點,可以有效保護所簽署消息的具體內容,所以在電子商務和電子選舉等領域有著廣泛的應用。
類比例子:對文件簽名就是通過在信封里放一張復寫紙,簽名者在信封上簽名時,他的簽名便透過復寫紙簽到文件上。
所謂盲簽名,就是先將隱蔽的文件放進信封里,而除去盲因子的過程就是打開這個信封,當文件在一個信封中時,任何人不能讀它。對文件簽名就是通過在信封里放一張復寫紙,簽名者在信封上簽名時,他的簽名便透過復寫紙簽到文件上。
一般來說,一個好的盲簽名應該具有以下的性質:
不可偽造性。除了簽名者本人外,任何人都不能以他的名義生成有效的盲簽名。這是一條最基本的性質。
不可抵賴性。簽名者一旦簽署了某個消息,他無法否認自己對消息的簽名。
盲性。簽名者雖然對某個消息進行了簽名,但他不可能得到消息的具體內容。
不可跟蹤性。一旦消息的簽名公開後,簽名者不能確定自己何時簽署的這條消息。
滿足上面幾條性質的盲簽名,被認為是安全的。這四條性質既是我們設計盲簽名所應遵循的標准,又是我們判斷盲簽名性能優劣的根據。
另外,方案的可操作性和實現的效率也是我們設計盲簽名時必須考慮的重要
因素。一個盲簽名的可操作性和實現速度取決於以下幾個方面:
1,密鑰的長度;
2,盲簽名的長度;
3,盲簽名的演算法和驗證演算法。
盲簽名具體步驟
1,接收者首先將待簽數據進行盲變換,把變換後的盲數據發給簽名者。
2,經簽名者簽名後再發給接收者。
3,接收者對簽名再作去盲變換,得出的便是簽名者對原數據的盲簽名。
4,這樣便滿足了條件①。要滿足條件②,必須使簽名者事後看到盲簽名時不能與盲數據聯系起來,這通常是依靠某種協議來實現的。
⑦ 什麼是對稱密碼和非對密碼,分析這兩種密碼體系的特點和應用領域
一、對稱密碼
1、定義:採用單鑰密碼系統的加密方法,同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密,也稱為單密鑰加密。
2、特點:演算法公開、計算量小、加密速度快、加密效率高。
3、應用領域:由於其速度快,對稱性加密通常在消息發送方需要加密大量數據時使用。
二、非對密碼
1、定義:非對稱密碼指的是非對稱密碼體制中使用的密碼。
2、特點:
(1)是加密密鑰和解密密鑰不同 ,並且難以互推 。
(2)是有一個密鑰是公開的 ,即公鑰 ,而另一個密鑰是保密的 ,即私鑰。
3、應用領域:很好的解決了密鑰的分發和管理的問題 ,並且它還能夠實現數字簽名。
(7)現代密碼學的演算法擴展閱讀
對稱加密演算法特徵
1、加密方和解密方使用同一個密鑰;
2、加密解密的速度比較快,適合數據比較長時的使用;
3、密鑰傳輸的過程不安全,且容易被破解,密鑰管理也比較麻煩