1. 程式人生 > >CTF-web Xman-2018 第二天 古典密碼和現代密碼

CTF-web Xman-2018 第二天 古典密碼和現代密碼

這是大師傅的wiki

https://ctf-wiki.github.io/ctf-wiki/crypto/introduction/?ADUIN=1528736192&ADSESSION=1533260489&ADTAG=CLIENT.QQ.5545_.0&ADPUBNO=26750

裡面涉及了各種密碼學的知識和點,很實用,因為大師傅的wiki都在了我也就不多說細說,注意一個坑點,在我們使用解密網站時,比如是柵欄密碼或者是base64等,不同的網站得到的結果是不同的,甚至有的網站無法得到結果。原因據師傅們考證來說是因為國內外什麼的思想不一樣。。。導致的結果不一樣。

base64我看使用notepad++就很不錯

http://tool.bugku.com/ 這個網站還行吧  支援的挺多 

還有一個軟體

另外這個是 隱寫檢查 提取資料的

流量分析的那就是

做這類的題目其實需要很多工具  古典密碼和隱寫類的多做做題看看別人用的啥,自己下載一份用用就好

 

凱撒密碼

凱撒密碼(Caesar)加密時會將明文中的 每個字母 都按照其在字母表中的順序向後(或向前)移動固定數目(迴圈移動)作為密文。例如,當偏移量是左移 3 的時候(解密時的金鑰就是 3)

對於不帶金鑰的凱撒密碼來說,其基本的破解方法有兩種方式

  1. 遍歷 26 個偏移量,適用於普遍情況
  2. 利用詞頻分析,適用於密文較長的情況。

其中,第一種方式肯定可以得到明文,而第二種方式則不一定可以得到正確的明文。

而對於基於金鑰的凱撒密碼來說,一般來說必須知道對應的金鑰。

 

簡單替換密碼

簡單替換密碼(Simple Substitution Cipher)加密時,將每個明文字母替換為與之唯一對應且不同的字母。它與愷撒密碼之間的區別是其密碼字母表的字母不是簡單的移位,而是完全是混亂的,這也使得其破解難度要高於凱撒密碼。

 一般做法是根據已知的資訊推算已知的,一步一步替換。而解密時,我們一般是知道了每一個字母的對應規則,才可以正常解密。

破解

由於這種加密方式導致其所有的金鑰個數是26!26! ,所以幾乎上不可能使用暴力的解決方式。所以我們 一般採用詞頻分析。

 

 

仿射密碼

仿射密碼的加密函式是 E(x)=(ax+b)(mod m),其中

  • x表示明文按照某種編碼得到的數字
  • a 和 m 互質
  • m是編碼系統中字母的數目。

根據加密原理可知,不同字元加密數也不一樣。

        互質的數,mod的數為字元數,不同的字元對應不同的加密,

求逆元的 gmpy2 裡面的invert(a,b)就是a關於b的逆元(安裝庫的要求比較多,用linux按吧)

 

柵欄密碼

將資訊分組,然後每組從第一個連結到一起,毫無規律

特點:

        可以分的組數固定,比如10只能分為2組或5組。

        遍歷,然後輸出結果即可。

 

01248 使用五個數字加密

將資訊的1-26使用二進位制的01248表示

原理很簡單,有了1,2,4,8這四個簡單的數字,你可以以加法表示出0-9任何一個數字,例如0=28,7=124,9=18。
這樣,再用1-26來表示A-Z,就可以用作密碼了。
為了不至於混亂,我個人引入了第五個數字0,來用作間隔,以避免翻譯錯誤,所以還可以稱01248密碼”。

題目:12401011801180212011401804
第一步,分割,即124  1  118  118  212  114  18  4
第二步,基本翻譯,例如124可以表示7,也可以表示16(加法可以分割1+2+4,12+4),所以可以放在一邊,翻譯其他沒有異議的,可得:124  a  s  s  w  o  18  d

 

鍵盤密碼

對應字母區域的行和列

例子 2373111

我們可以知道2列3行為x 73為m 111位擴充套件的{  根據flag格式推測出來的,存在三位一起的。

 

流密碼

流密碼一般逐位元組或者逐位元處理資訊。一般來說

流密碼的金鑰長度會與明文的長度相同。

流密碼的金鑰派生自一個較短的金鑰,派生演算法通常為一個偽隨機數生成演算法。

需要注意的是,流加密目前來說都是對稱加密。

偽隨機數生成演算法生成的序列的隨機性越強,明文中的統計特徵被覆蓋的更好。

流密碼加解密非常簡單,在已知明文的情況下,可以非常容易地獲取金鑰流。

流密碼的關鍵在於設計好的偽隨機數生成器。一般來說,偽隨機數生成器的基本構造模組為反饋移位暫存器。當然,也有一些特殊設計的流密碼,比如 RC4。

 

偽隨機碼

偽隨機數生成器(pseudorandom number generator,PRNG),又稱為確定性隨機位生成器(deterministic random bit generator,DRBG),是用來生成接近於絕對隨機數序列的數字序列的演算法。一般來說,PRNG 會依賴於一個初始值,也稱為種子,來生成對應的偽隨機數序列。只要種子確定了,PRNG 所生成的隨機數就是完全確定的,因此其生成的隨機數序列並不是真正隨機的。

就目前而言,PRNG 在眾多應用都發揮著重要的作用,比如模擬(蒙特卡洛方法),電子競技,密碼應用。

 

 

lsfr移位暫存器

幾乎都是爆破,依靠流的猜解

 

RC4

迴圈是0-255,交換非常頻繁

 

塊密碼

塊加密,英文Block Cyper,又稱分組加密,是一種常見的對稱加密,具有代表性的塊加密有DES,AES,3DES等。塊加密的工作模式允許使用同一個分組密碼金鑰對多於一塊的資料進行加密,並保證其安全性。

使用輪加密函式,使用不同的引數等。

ECB模式

又稱電子密碼本模式:Electronic codebook,是最簡單的塊密碼加密模式,加密前根據加密塊大小(如AES為128位)分成若干塊,之後將每塊使用相同的金鑰單獨加密,解密同理。

 

CBC模式

密碼分組連結(CBC,Cipher-block chaining)模式,由IBM於1976年發明,每個明文塊先與前一個密文塊進行異或後,再進行加密。在這種方法中,每個密文塊都依賴於它前面的所有明文塊。同時,為了保證每條訊息的唯一性,在第一個塊中需要使用初始化向量IV。

 

RSA

        RSARSA屬於非對稱加密演算法,因為RSARSA使用了兩個不同的金鑰分別用於加密和解密,這兩個金鑰稱之為公私鑰對,其中公鑰用於加密,且公鑰是公開的,而私鑰用於解密,私鑰是私有的。

        在公開金鑰密碼體制中,加密金鑰(即公開金鑰)PKPK是公開資訊,而解密金鑰(即祕密金鑰)SKSK是需要保密的。加密演算法EE和解密演算法DD也都是公開的。雖然解密金鑰SKSK是由公開金鑰PKPK決定的,但卻不能根據PKPK計算出SKSK(對於簡答的加密的處理的話還是可以破解的)。

        根據一定的數學原理,採用一點規則生成的成對的公鑰祕鑰可以實現對資訊加密解密,但是想要推匯出祕鑰很難,這就是基本的依據

        

RSARSA加密過程

  1. 找到兩個大素數ppqq,計算出n=p×q

  2. 得到φ=(p1)×(q1),然後選擇一個e(1<e<φ),且gcd(φ,e)=1ggcd為最大公約數,即eφ互質(互為質數)

  3. 計算出d,計算方法:(e×d)%φ=1

  4. 得到了公私鑰對,其中{e,n}為公鑰,{d,n}為私鑰。

  5. 針對明文M,進行加密:C=M^e%n,得到的C即為密文

  6. 針對密文C,進行解密,M=C^d%n,得到的M即為明文

通過上面的加密方式和解密方式可以知道,明文是以數字的方式進行加密和解密,一般都是針對單個字元的ASCII碼進行加密,也可能兩個…,這裡的操作物件為位數小於n的位數的資料,比如說一串資料變為二進位制為111011101101111011101101,而nn的位數為55那麼你要處理的資料可能是1位二進位制,2位二進位制,3位二進位制和44位二進位制 
圖如下: 

注意:

當e=1時,C=M%n,相當於沒加密, M = C + n*k (k=0,1,2,3...),嘗試不同的就可以。