加解密

參考文獻 web

page1image1632.png page1image2552.png

綜述 算法

 1)信息保密:加密技術;•安全

2)信息完整行(無篡改):數字指紋;函數

3)身份認證:數字簽名;ui

4)身份可靠性(公鑰可靠性):數字證書。this

 保密性,完整性,端點認證 編碼

 

加密技術:(1)加密算法;(2)祕鑰交換。 加密

 

page1image1632.png page1image2552.png

數據加密 url

• 單向加密設計

• 數字簽名

• 對稱加密

非對稱加密 

• 密鑰交換 

page1image1632.png page1image2552.png

單向加密 

• 別名:數字摘要、數字簽名。

• 確保數據的完整性,不被篡改。

• 算法基礎:hash。

• 理論基礎:雪崩效應。

 

• md5(標準密鑰長度128位)、sha1(標準密鑰長度160位) 

page1image1632.png page1image2552.png

• - (NSData *) MD5Sum •{ 

• • • 

unsigned char hash[CC_MD5_DIGEST_LENGTH]; 

(void) CC_MD5( [self bytes], (CC_LONG)[self length], hash ); 

return ( [NSData dataWithBytes: hash length: CC_MD5_DIGEST_LENGTH] ); 

•} 

• - (NSData *) SHA1Hash •{ 

  • unsigned char hash[CC_SHA1_DIGEST_LENGTH];
  • (void) CC_SHA1( [self bytes], (CC_LONG)[self length], hash );
  • return ( [NSData dataWithBytes: hash length:CC_SHA1_DIGEST_LENGTH] ); 

page1image1632.png page1image2552.png

單向加密使用場景一 

• 只起到防篡改功能,不多單獨使用。• 單獨使用方案:(1)局部hash;(2)隨機hash。 

page1image1632.png page1image2552.png

單向加密的使用場景二 

• 登陸又令(身份證號等敏感信息)。 • 敏感信息訪問。 

page1image1632.png page1image2552.png

單向加密的使用場景二 數字簽名 

• 數字摘要+用戶的身份信息;用戶數據防篡改和身份認證; • 身份標示:商戶私鑰(字符串)。rsa私鑰。 

page1image1632.png page1image2552.png

• HMAC(Keyed-Hashing for Message Authentication) 

• 目前,信息安全領域廣泛認同的算法是HMAC,它基於MD5或 者SHA-1,在計算散列值時將密鑰和數據同時做爲輸入,並採用 了二次散列迭代的方式,實際計算方法以下: 

• HMAC(k,m)=Hash(CONCAT((k XOR opad) , Hash(CONCAT(k XOR ipad),m)))。其中k是密鑰,m是須要被簽名的消息。ipad/opad是標 準中定義好的2個常量。HMAC的特點是它不依賴於特定的Hash 算法 

page1image1632.png page1image2552.png

RSA簽名(DSA?) 

• size_t hashBytesSize = CC_SHA256_DIGEST_LENGTH; 

• //生成數字摘要 

• uint8_t* hashBytes = malloc(hashBytesSize); 

• if (!CC_SHA256([plainData bytes], (CC_LONG)[plainData length], hashBytes)) { 


•}
• //用RSA進行簽名• SecKeyRawSign(key,
• kSecPaddingPKCS1SHA256, 

return nil; 

• hashBytes, 

page1image1632.png page1image2552.png

自定義簽名 

• Sign(k,x)=Hash(CONCAT(k,x))。其中CONCAT是字符串鏈接函 數。 

• 身份標示+原始數據。 

• 將身份碼附着在明文後面做爲摘要輸入,進行摘要簽名。 

• 此方案,是對明文進行簽名(有其餘附加操做),並對簽名的結 果進行摘要操做。 

page1image1632.png page1image2552.png

先簽名仍是先加密 

• 假設用E(k,x)表示加密函數,Sign(k',x)表示簽名函數,保密性和完 整性我都想要,那麼就存在一個問題,先簽名仍是先加密? 

• 一、先加密後簽名:令y=E(k,x),t=Sign(k',y),而後發送(y,t)。實際 例子:IPSec。 

• 二、先簽名後加密:令t=Sign(k',x),y=E(k,t)。而後發送y。實際例 子:SSL。 

• 三、各算各的。令y=E(k,x),t=Sign(k',x),而後發送(y,t)。實際例 子:SSH。 

page1image1632.png page1image2552.png

對稱加密算法• 特色:加解密私鑰相同,算法可逆。 

• 分組加密算法:DES(Data Encryption Standard)、3DES、AES(Advanced Encryption Standard,支 持12八、19二、25六、512位密鑰的加密)、Blowfish。 

• 流式加密算法。 

page1image1632.png page1image2552.png

對稱分組加密算法模型CBC模式 

page1image3176.jpg 

 page1image2552.png page1image2552.png 

page1image1632.png page1image2552.png

對稱加密算法要素 

• private static final String AES_MODE = "AES/CBC/PKCS7Padding"; 

• 1)算法 AES;• 2)分組模式:CBC;• 3)填充方式:PKCS7Padding; 

• byte[] cipherText = encrypt(key, ivBytes, message.getBytes(CHARSET)); 

• 4)密鑰:key; 

• 5)ivBytes:初始化向量; 

page1image2104.png page1image2272.png page1image2552.png 

page1image1632.png page1image2552.png

對稱加密算法要素 

• CCCryptorStatus CCCryptorCreate( 

  • CCOperation op,
  • CCAlgorithm alg,
  • CCOptions options,
  • const void *key,
  • size_t keyLength,
  • const void *iv,
  • CCCryptorRef *cryptorRef) /* RETURNED */

/* kCCEncrypt, etc. */
/* kCCAlgorithmDES, etc. */ 

/* kCCOptionPKCS7Padding, etc. */ /* raw key material */ 

/* optional initialization vector */ 

• __OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0); 

page1image1632.png page1image2552.png

  • enum {
  • kCCModeECB
  • kCCModeCBC
    kCCModeCFB
  • kCCModeCTR
  • kCCModeF8
  • kCCModeLRW
  • kCCModeOFB
  • kCCModeXTS
  • kCCModeRC4

= 1,
= 2,分組連接模式 

= 3,密碼發反饋模式 = 4, 

= 5, // Unimplemented for now (not included)
= 6, // Unimplemented for now (not included) 

= 7, = 8, = 9, 

• kCCModeCFB8 = 10, 

page1image1632.png page1image2552.png

AES 密鑰長度 分組長度• AES的區塊長度固定爲128 比特,密鑰長度則能夠是128,192 

或256比特; 

• AES加密數據塊分組長度必須爲128比特,密鑰長度能夠是128比 特、192比特、256比特中的任意一個(若是數據塊及密鑰長度不 足時,會補齊)。 

page1image4368.png page1image4528.png page1image4688.png page1image4528.png page1image5008.png page1image4528.png page1image5328.png 

page1image1632.png page1image2552.png

填充方式 

• 

• • • • • • • 

在Java進行DES、3DES和AES三種對稱加密算法時,常採用的 是NoPadding(不填充)、Zeros填充(0填充)、PKCS5Padding 填充。 

2.4.1 ZerosPadding 

所有填充爲0的字節,結果以下:F1 F2 F3 F4 F5 F6 F7 F8 //第一塊 

F9 00 00 00 00 00 00 00 //第二塊2.4.2 PKCS5Padding 每一個填充的字節都記錄了填充的總字節數,結果以下: 

F1 F2 F3 F4 F5 F6 F7 F8 //第一塊 

• F9 07 07 07 07 07 07 07 //第二塊 

page1image1632.png page1image2552.png

• PKCS7 Padding:填充的內容是須要填充的字節數。若是最後一個 數據塊長度爲len,每一個塊的長度爲k,則要填充的內容爲: 

• 01 -- if lth mod k = k-1 • 02 -- if lth mod k = k-2 

page1image1632.png page1image2552.png

對稱加密初始化向量 

• 爲何須要初始化向量。 

• 消除重複的明文致使重複密文的問題。 

• 對於給定的私鑰 k,一個未使用初始化向量的簡單塊密碼將把相 同的明文輸入塊加密爲一樣的密文輸出塊。若是在明文流內有重 復的塊,那麼在密文流內也會有重複的塊。若是未經受權的用戶 知道有關明文塊的結構的全部信息,就可使用該信息解密已知 的密文塊並有可能得到您的密鑰。若要克服這個問題,可將上一 個塊中的信息混合到加密下一個塊的過程當中。這樣,兩個相同的 明文塊的輸出就會不一樣。因爲該技術使用上一個塊加密下一個 塊,所以使用了一個 IV 來加密數據的第一個塊。 

page1image1632.png page1image2552.png

加解密過程 

• 簡單的講,整個正反向過程是這樣的:• 加密:Padding->CBC加密->Base64編碼• 解密:Base64解碼->CBC解密->Unpadding 

page1image1632.png page1image2552.png

非對稱加密(公鑰加密) 

• 特色:、• 每一個用戶擁用一對密鑰加密:公鑰和私鑰。• 二、公鑰加密,私鑰解密;私鑰加密,公鑰解密。 • 三、公鑰傳輸的過程不安全,易被竊取和替換。• 加密速度慢。 

page1image1632.png page1image2552.png

理論基礎 

• RSA算法基於一個十分簡單的數論事實:將兩個大素數相乘十分 容易,可是想要對其乘積進行因式分解卻極其困難,所以能夠將 乘積公開做爲加密密鑰。 

• p:(隨機素數1)
• q:(隨機素數2)
• n:(素數積)
• φ(n):(歐拉函數,素數的歐拉函數爲:素數-1) • e:(加密因子) 

• d:(解密因子) 

page1image1632.png page1image2552.png

密鑰長度 

• 首先咱們說的「密鑰」是指誰?因爲RSA密鑰是(公鑰+模值)、 (私鑰+模值)分組分發的,單獨給對方一個公鑰或私鑰是沒有 任何用處,因此咱們說的「密鑰」實際上是它們二者中的其中一組。 但咱們說的「密鑰長度」通常只是指模值的位長度。目前主流可選 值:102四、204八、307二、4096... 

• @result The block length of the key in bytes.
• @discussion If for example key is an RSA key the value returned by • this function is the size of the modulus.
• size_t SecKeyGetBlockSize(SecKeyRef key) 

page1image1632.png page1image2552.png

RSA填充模式與分組長度 

 

RSA_PKCS1_PADDING
plaintext length should be smaller than RSA_size(rsa) - 11 

RSA_PKCS1_OAEP_PADDING
plaintext length should be smaller than RSA_size(rsa) - 41 

RSA_NO_PADDING
Assume caller performs padding. plaintext length should be equal to RSA_size(rsa) 

page1image1632.png page1image2552.png

爲何每次加密的數據不一樣 PKCS1填充模式 

• 1.長度檢查, 若是 mLen > k-11, 輸出 「message too long」 

• 2. EME-PKCS1-v1_5 編碼 a) 生成一個 僞隨機非零串PS , 長 度爲 k – mLen – 3, 因此至少爲8, 由於 k-mLen>11 b) 將PS, M,以及其餘填充串 一塊兒編碼爲 EM, 長度爲 k, 即: EM = 0×00 || 0×02 || PS || 0×00 || M 

page1image1632.png page1image2552.png

加解密算法設計(密鑰交換算法)• RSA交換對稱加密密鑰,AES使用交換到的私鑰加密通訊數據。 

• 私鑰從私鑰空間產生,通訊雙方知道私鑰產生規則。將私鑰產生 時的輸入數據做爲通訊一部分傳輸。(目前使用的) 

• DH 密鑰交換 

• 其它:使用單向加密技術生成標準密鑰。GEN(str)= KEY(定 長)。 

page1image2104.png page1image2272.png page1image2552.png 

page1image1632.png page1image2552.png

身份的不可抵賴性與證書體系

• 證書頒發機構與根證書。 • 證書的包含的內容。 

page1image1632.png page1image2552.png

end • 提問環節。 

相關文章
相關標籤/搜索