Chống lại khóa yếu

Một phần của tài liệu Quá trình tìm hiểu tổng quan về mã hóa và lớp Crytography trong .NET trong việc bảo vệ thông tin (Trang 69 - 70)

Có một hàm trong lớp DES và TripleDES có tên là IsWeakKey, nó sẽ lấy chuỗi byte có chưa khóa làm biến, và trả lại giá trị kiểu Boolean. Hàm này được sử dụng để xác định rằng khóa có yếu hay không. Chúng ta biết rằng khóa yếu trong mã hóa là dễ dàng để có thể bẻ. Khóa yếu có một số các đặc trưng sau: Nếu một mẩu tin được mã hóa bằng khóa yếu, thì sau khi mã hóa tiếp một lần nữa bằng khóa đó nó sẽ cho ra kết quả của mẩu tin ban đầu.

Vì TripleDes được xây dựng từ DES nên khóa yếu với DES cũng đồng nghĩa với việc nó yếu với TripleDES. Sẽ không có khóa yếu với các thuật toán RC2 và Rijndael thế nên lớp RC2 và Rijndael sẽ không có hàm

IsWeakKey.

Đã có 4 khóa của Des được liệt vào danh sách khóa yếu và hiển nhiên là chúng ta có thể tránh được những khóa này. Tuy nhiên cũng không đáng lo ngại nhiều lắm vì DES có tới 56 bit tức là 256 key có thể sử dụng trong khi số lượng khóa yếu chỉ là 4 (22) vậy nên xác xuất để lấy phải khóa yếu là 2-54. Còn 12 khóa được đưa vào danh sách nửa-yếu, nhưng số lượng đó cũng là rất ít so với 256 khóa có thể lấy nên chúng ta không cần quá quan tâm đến nó.

Trong mọi trường hợp, phần lới chương trình sử dụng mã khóa bí mật được sinh một cách tự động qua đối tượng thuật toán mã hóa, nó sẽ không bao giờ cung cấp cho ta một khóa yếu. Nếu chúng ta sử dụng lời gọi hàm

GenerateKey thì bạn hoàn toàn có thể chắc chắn rằng chúng ta đã tránh được

khóa yếu. Trong trường hợp chúng ta lấy khóa theo kiểu khác như là từ CSP hoặc nguồn ở ngoài, lớp DES và TripleDES sẽ báo lỗi khi bạn cố tình sử

dụng khóa yếu. Để tránh việc này bạn hoàn toàn có thể sử dụng hàm

IsWeakKey.

Một phần của tài liệu Quá trình tìm hiểu tổng quan về mã hóa và lớp Crytography trong .NET trong việc bảo vệ thông tin (Trang 69 - 70)