當前位置:編程學習大全網 - 源碼下載 - 常見密碼算法原理

常見密碼算法原理

PBKDF2(Password-Based Key Derivation Function)是壹個用來導出密鑰的函數,用來生成加密的密碼,增加破解的難度,類似bcrypt/scrypt等,可以用來進行密碼或者口令的加密存儲。主要是鹽值+pwd,經過多輪HMAC算法的計算,產生的密文。

PBKDF2函數的定義

DK = PBKDF2(PRF, Password, Salt, c, dkLen)

? PRF是壹個偽隨機函數,例如HASH_HMAC函數,它會輸出長度為hLen的結果。

? Password是用來生成密鑰的原文密碼。

? Salt是壹個加密用的鹽值。

? c是進行重復計算的次數。

? dkLen是期望得到的密鑰的長度。

? DK是最後產生的密鑰。

blogs.com/fishou/p/4206451.html

/questions/90169/rsa-public-key-and-private-key-lengths

/questions/2921508/trying-to-understand-java-rsa-key-size >

/Cryptography/RSA-BigInteger-Keys-Generated-by-RsaKeyGenerator-java.html

update() adds data to the Cipher’s internal buffer, then returns all currently completely encoded blocks. If there are any encoded blocks left over, they remain in the Cipher’s buffer until the next call, or a call to doFinal(). This means that if you call update() with a four byte array to encrypt, and the buffer size is eight bytes, you will not receive encoded data on the return (you’ll get a null instead). If your next call to update() passes five bytes of data in, you will get an 8 byte (the block size) array back, containing the four bytes passed in on the previous call, the first four bytes from the current call – the remaining byte from the current call is left in the Cipher’s buffer.

doFinal() on the other hand is much simpler: it encrypts the passed data, pads it out to the necessary length, and then returns it. The Cipher is essentially stateless.

來自 /a/1190000006931511

DH算法的中間人攻擊

在最初的描述中,迪菲-赫爾曼密鑰交換本身並沒有提供通訊雙方的身份驗證服務,因此它很容易受到中間人攻擊。 壹個中間人在信道的中央進行兩次迪菲-赫爾曼密鑰交換,壹次和Alice另壹次和Bob,就能夠成功的向Alice假裝自己是Bob,反之亦然。而攻擊者可以解密(讀取和存儲)任何壹個人的信息並重新加密信息,然後傳遞給另壹個人。因此通常都需要壹個能夠驗證通訊雙方身份的機制來防止這類攻擊。

優缺點:

1、 僅當需要時才生成密鑰,減小了將密鑰存儲很長壹段時間而致使遭受攻擊的機會。

2、 除對全局參數的約定外,密鑰交換不需要事先存在的基礎結構。

然而,該技術也存在許多不足:

1、 沒有提供雙方身份的任何信息。

2、 它是計算密集性的,因此容易遭受阻塞性攻擊,即對手請求大量的密鑰。受攻擊者花費了相對多的計算資源來求解無用的冪系數而不是在做真正的工作。

3、 沒辦法防止重演攻擊。

4、 容易遭受中間人的攻擊。第三方C在和A通信時扮演B;和B通信時扮演A。A和B都與C協商了壹個密鑰,然後C就可以監聽和傳遞通信量。中間人的攻擊按如下進行:

(1) B在給A的報文中發送他的公開密鑰。

(2) C截獲並解析該報文。C將B的公開密鑰保存下來並給A發送報文,該報文具有B的用戶ID但使用C的公開密鑰YC,仍按照好像是來自B的樣子被發送出去。A收到C的報文後,將YC和B的用戶ID存儲在壹塊。類似地,C使用YC向B發送好像來自A的報文。

(3) B基於私有密鑰XB和YC計算秘密密鑰K1。A基於私有密鑰XA和YC計算秘密密鑰K2。C使用私有密鑰XC和YB計算K1,並使用XC和YA計算K2。

(4) 從現在開始,C就可以轉發A發給B的報文或轉發B發給A的報文,在途中根據需要修改它們的密文。使得A和B都不知道他們在和C***享通信。

  • 上一篇:13億虛擬寵物貓介紹?
  • 下一篇:以目前語音識別技術而言,可以精準識別出動物的聲音嗎?
  • copyright 2024編程學習大全網