常見算法安全

常見算法安全

概述

本文討論現下常見算法的安全問題

範圍

種類包括 對稱加密/非對稱加密/摘要/編碼

標準包括 國際標準和國家標準

算法種類

對稱算法(分組密碼算法):AES/DES/SM4

非對稱算法(公鑰密碼算法):RSA/SM2

摘要算法(雜湊算法):MD5/SHA-I/SM3

編碼 Base64

SMx爲國密算法

不安全算法/用法和建議

不安全用法/禁止:

數據庫存儲用戶密碼明文或不安全算法加密的密文

日誌文件中用戶密碼明文或不安全算法加密的密文

不安全算法

  • 明文
  • XOR 異或
  • MD5
  • SHA1
  • Base64編碼
  • DES/4DES
  • 私有算法等
  • AES 的非 HMAC 模式
    • CBC
    • OFB
    • CTR
    • ECB

建議

  • 採用基於 摘要算法和加入鹽值(salt)方式安全存儲口令信息
    • SHA2
    • bcrypt
    • JWT HS256/RS256
  • AES:128位,GCM 模式,NoPaddding Cipher c = Cipher.getInstance("AES/GCM/NoPadding");
  • RSA:2018位,OAEPWithMD5AndMGF1Padding rsa = javax.crypto.Cipher.getInstance("RSA/ECB/OAEPWithMD5AndMGF1Padding");
  • DSA:2048位

知名安全組織/工具不安全算法條目

mitre

CWE-327: Use of a Broken or Risky Cryptographic Algorithm http://cwe.mitre.org/data/definitions/327.html

包括:

find-sec-bug安全算法相關

https://find-sec-bugs.github.io/bugs.htm#STATIC_IV

使用固定的IV,在對稱算法(AES)用使用固定的IV(初始化向量) 建議:每次加密都使用不同的IV

https://find-sec-bugs.github.io/bugs.htm#ECB_MODE

使用 AES/ECB 即電子密碼本模式, 建議使用 AES/GCM 伽羅華計數器模式 AES-GCM 加密簡介

https://find-sec-bugs.github.io/bugs.htm#PADDING_ORACLE

建議使用: NoPadding Cipher c = Cipher.getInstance("AES/GCM/NoPadding");

https://find-sec-bugs.github.io/bugs.htm#CIPHER_INTEGRITY Cipher with no integrity 加密器沒有完整性檢查(簽名) 基於哈希的加密訊息鑑別碼(HMAC)以下AES模式都沒有

  • CBC
  • OFB
  • CTR
  • ECB

建議: GCM

https://find-sec-bugs.github.io/bugs.htm#ESAPI_ENCRYPTOR

使用 OWASP ESAPI 加密組件,<= 2.0.1 有漏洞,建議 2.1.0 以上 MAC bypass (CVE-2013-5679). 版本:ESAPI 版本<=2.0.1 有漏洞 一些配置也會影響其安全性

// BAD
Encryptor.CipherText.useMAC=false
Encryptor.EncryptionAlgorithm=AES
Encryptor.CipherTransformation=AES/CBC/PKCS5Padding
Encryptor.cipher_modes.additional_allowed=CBC
// GOOD
Encryptor.CipherText.useMAC=true
#Needed to have a solid auth. encryption
Encryptor.EncryptionAlgorithm=AES
Encryptor.CipherTransformation=AES/GCM/NoPadding
#CBC mode should be removed to avoid padding oracle
Encryptor.cipher_modes.additional_allowed=

SonarQube算法安全相關

https://rules.sonarsource.com/java/RSPEC-4432 AES encryption algorithm should be used with secured mode

https://rules.sonarsource.com/java/RSPEC-2278 Neither DES (Data Encryption Standard) nor DESede (3DES) should be used

https://rules.sonarsource.com/java/RSPEC-5542 Encryption algorithms should be used with secure mode and padding scheme

https://rules.sonarsource.com/java/RSPEC-4787 Encrypting data is security-sensitive

https://rules.sonarsource.com/java/RSPEC-2277 Cryptographic RSA algorithms should always incorporate OAEP (Optimal Asymmetric Encryption Padding)

算法詳解

ESAPI

owasp提供的一套API級別的web應用解決方案

ESAPI

ESAPI學習筆記

SHA2

SHA256算法原理詳解

SHA2算法加密計算器

AES

AES: Advanced Encryption Standard DES 算法的替代者

AES加密的安全問題

  1. 電碼本模式(Electronic Codebook Book (ECB))
  2. 密碼分組鏈接模式(Cipher Block Chaining (CBC)) 這種模式是先將明文切分成若干小段,然後每一小段與初始塊或者上一段的密文段進行異或運算後,再與密鑰進行加密。
  3. 計算器模式(Counter (CTR))
  4. 密碼反饋模式(Cipher FeedBack (CFB))
  5. 輸出反饋模式(Output FeedBack (OFB))

攻擊方法:

  • 針對 ECB 的密文替換
  • 針對 CBC 的字節反轉

ECB每一個明文塊都會生成同樣的密文

CTR 計數器模式解決了ECB模式中,相同的明文會得到相同的密文的問題。

CBC,CFB,OFB模式都能解決這個問題,但CTR的另兩個優點是:

1)支持加解密並行計算,可事先進行加解密準備;

2)錯誤密文中的對應比特只會影響明文中的對應比特等優點。

缺點:

但CTR仍然不能提供密文消息完整性校驗的功能。

現在安全的是 AES-GCM模式

什麼是 AES-GCM加密算法

AES128和AES256主要區別和安全程度是多少

結論: AES128已經足夠用

爲什麼ECB不安全:

引自:https://a-little-cat.github.io/2017/12/14/SM4.html

 

RSA

國密算法

參考: 淺談國密算法

GmSSL

GmSSL是一個開源的密碼工具箱,支持SM2/SM3/SM4/SM9/ZUC等國密(國家商用密碼)算法

https://github.com/guanzhi/GmSSL

國密SM4/SMS4分組密碼 兩個結論:

 
1 由於SMS4的密鑰長度固定爲128比特,並有提供更長的可選密鑰長度,因此SMS4不適用於保護需長期保密的數據,如需50年才能解密的保密文檔
2 由於SMS4設計時的預計應用領域爲低功耗芯片(即WAPI芯片),因此SMS4針對減少硬件電路數量進行了優化,帶來的後果是SMS4的軟件實現效率較低,難以充分利用主流32位/64位通用處理器的計算能力,其軟件實現的效率通常大大低於AES-128的軟件實現

JWT

jwt 中常用的簽名算法是

  • HS256 對稱算法,密鑰雙方一樣
  • RS256 非對稱算法,分公鑰和祕鑰
  • None 注意有的組件會支持None,即不加密

注意 在 jwt 中,消息體是透明的,加密只是做爲簽名保證數據不被篡改,不要傳遞敏感數據

深入理解JWT的使用場景和優劣

JSON Web Token (JWT) 攻擊技巧

理解JWT的使用場景和優劣 http://blog.didispace.com/learn-how-to-use-jwt-xjf/

JSON Web Token - 在Web應用間安全地傳遞信息 http://blog.didispace.com/json-web-token-web-security/

八幅漫畫理解使用 JWT設計的單點登錄系統 http://blog.didispace.com/user-authentication-with-jwt/

JSON Web Token 入門教程 https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html

只要一行代碼,實現五種 CSS 經典佈局 http://www.ruanyifeng.com/blog/2020/08/five-css-layouts-in-one-line.html

SSL/TLS

OAuth 2.0

理解OAuth 2.0 https://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

異或運算

異或也叫半加運算, 其運算法則相當於不帶進位的二進制加法: 二進制下用1表示真,0表示假,則異或的運算法則爲:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同爲0,異爲1), 這些法則與加法是相同的,只是不帶進位,所以異或常被認作不進位加法。 程序中有三種演算子:XOR、xor、⊕。

異或算法有知其二必知其剩下一個數的特點,可以認爲是最簡單的加密算法

Galois Field

有限域(英語:finite field)或伽羅瓦域 Galois field 在數學中,有限域(英語:finite field)或伽羅瓦域(英語:Galois field,爲紀念埃瓦里斯特·伽羅瓦命名)是包含有限個元素的域。 與其他域一樣,有限域是進行加減乘除運算都有定義並且滿足特定規則的集合。 有限域最常見的例子是當p 爲素數時,整數對 p 取模。 有限域的元素個數稱爲它的階。

伽羅華域(Galois Field)上的四則運算

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章