Wednesday, January 13, 2021

Random vs Secure Random numbers trong Java

Lớp java.security.SecureRandom: Lớp này cung cấp một trình tạo số ngẫu nhiên mạnh về mặt mật mã (RNG). Số ngẫu nhiên mạnh về mặt mật mã tuân thủ tối thiểu các kiểm tra trình tạo số ngẫu nhiên thống kê được chỉ định trong FIPS 140-2, Yêu cầu bảo mật đối với mô-đun mật mã, phần 4.9.1. Ngoài ra, SecureRandom phải tạo ra đầu ra không xác định. Do đó, bất kỳ tài liệu gốc nào được chuyển đến đối tượng SecureRandom phải không thể đoán trước được và tất cả các chuỗi đầu ra của SecureRandom phải mạnh về mặt mật mã.

Lớp java.util.Random: Các lớp được xác định trong Ngẫu nhiên không mạnh về mặt mật mã và các số được chọn không hoàn toàn ngẫu nhiên vì một thuật toán toán học xác định (dựa trên thuật toán tạo số ngẫu nhiên trừ của Donald E. Knuth) được sử dụng để chọn chúng. Do đó, sẽ không an toàn khi sử dụng lớp này cho các tác vụ yêu cầu mức độ bảo mật cao, như tạo mật khẩu ngẫu nhiên, v.v.

Ngẫu nhiên và Bảo mật

Kích thước: Một lớp Random chỉ có 48 bit trong khi SecureRandom có ​​thể có tới 128 bit. Vì vậy, cơ hội lặp lại trong SecureRandom nhỏ hơn.

Tạo hạt giống: Ngẫu nhiên sử dụng đồng hồ hệ thống làm hạt giống / hoặc để tạo hạt giống. Vì vậy, chúng có thể được tái tạo một cách dễ dàng nếu kẻ tấn công biết thời gian mà hạt giống được tạo ra. Nhưng SecureRandom lấy Dữ liệu Ngẫu nhiên từ Hệ điều hành của bạn (chúng có thể là khoảng thời gian giữa các lần nhấn phím, v.v. - hầu hết Hệ điều hành thu thập những dữ liệu này và lưu trữ chúng trong các tệp - / dev / random và / dev / urandom trong trường hợp linux / solaris) và sử dụng nó làm hạt giống .

Phá vỡ mã: Trong trường hợp ngẫu nhiên, chỉ cần 2 ^ 48 lần thử, với cpu tiên tiến ngày nay, bạn có thể phá mã trong thời gian thực tế. Nhưng đối với securerandom 2 ^ 128 lần thử sẽ được yêu cầu, điều này sẽ mất hàng năm trời để hòa vốn với các máy móc tiên tiến ngày nay.

Chức năng tạo: Triển khai Oracle JDK 7 tiêu chuẩn sử dụng cái được gọi là Trình tạo thông số tuyến tính để tạo ra các giá trị ngẫu nhiên trong java.util.Random. Trong khi Secure Random triển khai thuật toán SHA1PRNG, sử dụng SHA1 để tạo các số giả ngẫu nhiên. Thuật toán tính toán hàm băm SHA-1 trên một số ngẫu nhiên thực sự (sử dụng nguồn entropy) và sau đó nối nó với bộ đếm 64 bit tăng lên 1 trên mỗi hoạt động.

Bảo mật: Do đó, java.util. Lớp ngẫu nhiên không được sử dụng cho các ứng dụng quan trọng về bảo mật hoặc để bảo vệ dữ liệu nhạy cảm. 

public class generateRandom {

 

    public static void main(String args[])

    {

        // create instance of Random class

        Random rand = new Random();

 

        // Generate random integers in range 0 to 999

        int rand_int1 = rand.nextInt(1000);

        int rand_int2 = rand.nextInt(1000);

 

        // Print random integers

        System.out.println("Random Integers: " + rand_int1);

        System.out.println("Random Integers: " + rand_int2);

    }

}

Kết quả:

Random Integers: 956

Random Integers: 678

Tạo số ngẫu nhiên bằng java.security.SecureRandom

 public class generateRandom {

 

    public static void main(String args[])

    {

        // create instance of SecureRandom class

        SecureRandom rand = new SecureRandom();

 

        // Generate random integers in range 0 to 999

        int rand_int1 = rand.nextInt(1000);

        int rand_int2 = rand.nextInt(1000);

 

        // Print random integers

        System.out.println("Random Integers: " + rand_int1);

        System.out.println("Random Integers: " + rand_int2);

    }

}

Kết quả:

Random Integers: 817

Random Integers: 500

Bài viết của bạn qua đường bưu điện tới donate lập trình java. Xem bài viết của bạn xuất hiện trên trang chính của lập trình java nâng cao và trợ giúp những Geeks khác.

Vui lòng viết bình luận nếu bạn thấy bất kỳ điều gì không chính xác, hoặc bạn muốn chia sẻ thêm thông tin về chủ đề đã thảo luận ở trên

Bạn đọc chú ý! Đừng ngừng học ngay bây giờ. Nắm bắt tất cả các khái niệm Java Foundation và Collections quan trọng với Khóa học Cơ bản về Java và Java Collections với mức giá thân thiện với sinh viên và sẵn sàng trong ngành.

No comments:

Post a Comment