區塊鏈兄弟社區,區塊鏈技術專業問答先行者,中國區塊鏈技術愛好者彙集地算法
做者:於中陽安全
來源:區塊鏈兄弟函數
原文連接:http://www.blockchainbrother.com/article/73學習
著權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。區塊鏈
1.算法和密鑰加密
密碼算法(cryptographic algorithm)亦稱爲密碼(cipher),其是用於加密和解密的數學函數。通常狀況下,會有兩個相關函數,一個用於加密,一個用於解密。spa
若給予算法的保密性僅僅是基於對保持算法自己的祕密,那麼這種算法被稱爲受限的(restricted)算法。受限制的算法具備至關的歷史意義,但按照現代的標準,其保密性已經遠遠不夠。舉一個例子,一個組織使用了一種算法,如有一個工做人員離開了這個組織,那麼其餘的工做者爲了安全性就必須改變另外不一樣的算法。同時,如有人有意或無心的泄露了這個祕密,全部的人都必須改變他們的算法。設計
與此同時須要指出的是,受限制的密碼算法不可能進行質量控制或標準化。每一個用戶組織必須擁有本身的惟一算法。這樣的話,這些組織不可能採用流行的硬件或軟件產品,由於竊聽者是能夠經過外界的購買獲得這些產品並學習算法的,這就勢必致使用戶不得已必須本身編寫算法並予以實現,但若這個組織中沒有卓越的密碼學家,那麼他們是無從得知他們是否擁有了安全的算法。rest
固然,儘管如此受限制的算法在對密級要求低的應用場景中仍是很流行的。ip
現代密碼學用密鑰(key)這個概念,嘗試解決了這個問題,密鑰用K來表示,K能夠是不少數值裏的任意值。密鑰K的可能取值範圍叫作密鑰空間(keyspace)。加密和解密運算都會使用到這個密鑰,即運算依賴於密鑰,並用K做爲下標表示。
以上這種狀況,加密用到的密鑰和解密用到的密鑰是相同的。但有些算法使用的是不一樣的密鑰進行加密和解密的,即加密密鑰和解密密鑰是不一樣的。
如今談的這些算法的安全性都是基於密鑰的安全性,而不是基於算法細節的安全性。這就意味着算法是能夠公開的,也能夠被分析。這樣就能夠大量生產使用算法的產品。即便竊聽者知道了你使用的算法也沒從破譯,只要他不知道你具體使用的密鑰,就沒法閱讀你的信息消息。
密碼系統(cryptosystem)由算法以及全部可能的明文、密文和密鑰組成。
2.對稱算法
基於密鑰的算法一般有兩類:1)對稱算法,2)公開密鑰算法。對稱算法(symmetric algorithm)又稱爲傳統密碼算法,就是加密密鑰可以從解密密鑰中推算出來,反過來也成立。在大多數對稱算法中,加密和解密的密鑰是相同的。這些算法也稱爲祕密密鑰算法或單密鑰算法,其要求發送者和接收者在確保安全通訊以前,協商出一個密鑰。對稱算法的安全性依賴於密鑰,泄密密鑰就意味着任何人都能對信息消息進行閱讀、加密解密。注意,只要通訊須要保密,密鑰就必須保密。
對稱算法又可爲兩類,一次僅對明文中的單個位(有時是對字節)運算的算法稱爲序列算法(stream algorithm)或序列密碼(stream cipher)。
另外一類算法是對明文的一組位進行運算,這些位組稱爲分組(block),相對應的算法就稱爲分組算法(block algorithm)或分組密碼(block cipher)。
現代計算機密碼算法的典型分組長度爲64位,這個長度基本足以防止分析破譯,但又十分方便使用。
注:在計算機出現以前,算法廣泛的每次只對明文的一個字符運算,能夠認爲序列密碼是對字符序列的運算。
3.公開密鑰算法(非對稱算法)
公開密鑰算法(public-key algorithm,其有一個更爲熟知的稱謂叫非對稱算法),這種算法是這樣設計的,用做加密的密鑰不一樣於用做解密的密鑰,並且解密密鑰不能根據加密密鑰被計算獲得。(注:在合理的假設時間內沒法被計算獲得便可)這種算法之因此叫作「公開密鑰」算法,是由於加密密鑰是能夠公開的,即第三方是可以使用加密密鑰對信息進行加密的,但只有用相應的解密密鑰才能夠對信息進行解密獲得解密信息。
在此係統中,加密密鑰稱爲公開密鑰(public-key,簡稱公鑰),解密密鑰叫作私人密鑰(private key,簡稱私鑰)。私人密鑰有時也稱爲祕密密鑰,但爲了不同對稱算法產生混淆,通常不採用祕密密鑰這種叫法,通常就叫私鑰。
注:必須用公鑰加密和私鑰解密的思惟是受限的,有的時候,咱們用私鑰進行加密,用公鑰進行解密,這種應用場景常見於數字簽名。
文章發佈只爲分享區塊鏈技術內容,版權歸原做者全部,觀點僅表明做者本人,毫不表明區塊鏈兄弟贊同其觀點或證明其描述