Pkcs5padding là gì

Việc sử dụng sai các thuật toán mã hóa có thể dẫn đến việc lộ dữ liệu nhạy cảm, rò rỉ khóa, xác thực bị hỏng, phiên không an toàn và các cuộc tấn công giả mạo. Có một số thuật toán mã hóa hoặc băm được biết là yếu và không được đề xuất sử dụng, chẳng hạn như MD5 và RC4.

Các bài viết liên quan:

  • Hàm băm [hash function] là gì?
  • Các Hash funtion đang được sử dụng
  • BlockChain? cách hoạt động và kiến thức nền tảng
  • Triển khai Directory trong hệ điều hành
  • Mã hóa mật mã: các khái niệm cơ bản

Ngoài các lựa chọn phù hợp về mã hóa an toàn hoặc thuật toán băm, việc sử dụng đúng các tham số cũng quan trọng đối với mức độ bảo mật. Ví dụ: chế độ ECB [Sổ mã điện tử] không được đề xuất để sử dụng trong mã hóa không đối xứng.

Tóm tắt nội dung

Mục tiêu kiểm tra

Cung cấp hướng dẫn để xác định cách sử dụng và triển khai mã hóa băm hoặc mã hóa yếu.

Làm thế nào để kiểm tra

Danh sách kiểm tra bảo mật cơ bản

Khi sử dụng AES128 hoặc AES256, IV [Véc tơ khởi tạo] phải ngẫu nhiên và không thể đoán trước. Tham khảo FIPS 140-2, Yêu cầu bảo mật đối với mô-đun mật mã, phần 4.9.1. kiểm tra bộ tạo số ngẫu nhiên. Ví dụ, trong Java, java.util.Random được coi là một trình tạo số ngẫu nhiên yếu. java.security.SecureRandom nên được sử dụng thay vì java.util.Random.

Đối với mã hóa không đối xứng, hãy sử dụng Mật mã đường cong Elliptic [ECC] với đường cong an toàn như Curve25519 được ưu tiên.

Nếu không thể sử dụng ECC thì hãy sử dụng mã hóa RSA với khóa tối thiểu 2048bit.

Khi sử dụng RSA trong chữ ký, nên sử dụng phần đệm PSS.

Không nên sử dụng các thuật toán băm / mã hóa yếu như MD5, RC4, DES, Blowfish, SHA1. 1024-bit RSA hoặc DSA, 160-bit ECDSA [đường cong elip], 80/112-bit 2TDEA [hai khóa DES ba phím]

Yêu cầu về độ dài khóa tối thiểu:

Key exchange: Diffie–Hellman key exchange with minimum 2048 bits
Message Integrity: HMAC-SHA2
Message Hash: SHA2 256 bits
Asymmetric encryption: RSA 2048 bits
Symmetric-key algorithm: AES 128 bits
Password Hashing: PBKDF2, Scrypt, Bcrypt
ECDH, ECDSA: 256 bits

  • Không nên sử dụng chế độ SSH, CBC.
  • Khi sử dụng thuật toán mã hóa đối xứng, không nên sử dụng chế độ ECB [Sổ mã điện tử].
  • Khi PBKDF2 được sử dụng để băm mật khẩu, thông số lặp lại được khuyến nghị trên 10000. NIST cũng đề xuất ít nhất 10.000 lần lặp của hàm băm. Ngoài ra, hàm băm MD5 bị cấm sử dụng với PBKDF2 như PBKDF2WithHmacMD5.

Đánh giá mã nguồn

Tìm kiếm các từ khóa sau để xác định việc sử dụng các thuật toán yếu: MD4, MD5, RC4, RC2, DES, Blowfish, SHA-1, ECB

Đối với các triển khai Java, API sau có liên quan đến mã hóa. Xem lại các tham số của việc triển khai mã hóa. Ví dụ,

SecretKeyFactory[SecretKeyFactorySpi keyFacSpi, Provider provider, String algorithm]
SecretKeySpec[byte[] key, int offset, int len, String algorithm]
Cipher c = Cipher.getInstance["DES/CBC/PKCS5Padding"];

Đối với mã hóa RSA, các chế độ đệm sau được đề xuất.

RSA/ECB/OAEPWithSHA-1AndMGF1Padding [2048]
RSA/ECB/OAEPWithSHA-256AndMGF1Padding [2048]

Tìm kiếm ECB, nó không được phép sử dụng trong phần đệm.

Xem lại xem IV [Vectơ ban đầu] khác có được sử dụng hay không.

// Sử dụng một giá trị IV khác cho mọi mã hóa
byte[] newIv = ...;
s = new GCMParameterSpec[s.getTLen[], newIv];
cipher.init[..., s];
...

Tìm kiếm IvParameterSpec, kiểm tra xem giá trị IV có được tạo ngẫu nhiên và khác nhau hay không.

IvParameterSpec iv = new IvParameterSpec[randBytes];
 SecretKeySpec skey = new SecretKeySpec[key.getBytes[], "AES"];
 Cipher cipher = Cipher.getInstance["AES/CBC/PKCS5Padding"];
 cipher.init[Cipher.ENCRYPT_MODE, skey, iv];

Trong Java, tìm kiếm MessageDigest để kiểm tra xem thuật toán băm yếu [MD5 hoặc CRC] có được sử dụng hay không. Ví dụ:

MessageDigest md5 = MessageDigest.getInstance["MD5"];

Đối với chữ ký, SHA1 và MD5 không nên được sử dụng. Ví dụ:

Chữ ký sig = Signature.getInstance ["SHA1withRSA"];

Tìm kiếm PBKDF2. Để tạo giá trị băm của mật khẩu, bạn nên sử dụng PBKDF2. Xem lại các thông số để tạo PBKDF2 có giá trị.

Số lần lặp phải trên 10000 và giá trị muối phải được tạo dưới dạng giá trị ngẫu nhiên.

private static byte[] pbkdf2[char[] password, byte[] salt, int iterations, int bytes]
    throws NoSuchAlgorithmException, InvalidKeySpecException
  {
       PBEKeySpec spec = new PBEKeySpec[password, salt, iterations, bytes * 8];
       SecretKeyFactory skf = SecretKeyFactory.getInstance[PBKDF2_ALGORITHM];
       return skf.generateSecret[spec].getEncoded[];
   }

Thông tin nhạy cảm được mã hóa cứng:

Từ khóa liên quan đến người dùng: name, root, su, sudo, admin, superuser, login, username, uid

Các từ khóa liên quan chính: khóa công khai, AK, SK, khóa bí mật, khóa riêng, mật khẩu, mật khẩu, pwd, khóa chia sẻ, khóa chia sẻ, cryto, base64

Các từ khóa nhạy cảm phổ biến khác: sysadmin, root, đặc quyền, pass, key, code, master, admin, uname, session, token, Oauth, privatekey, shared secret

Công cụ

Các trình quét lỗ hổng bảo mật như Nessus, NMAP [script] hoặc OpenVAS có thể quét để sử dụng hoặc chấp nhận mã hóa yếu đối với giao thức như SNMP, TLS, SSH, SMTP, v.v.

Sử dụng công cụ phân tích mã tĩnh để xem xét mã nguồn như klocwork, Fortify, Coverity, CheckMark cho các trường hợp sau.

Chủ Đề