Điểm:0

Thông số kỹ thuật cho SHA1PRNG ở đâu?

lá cờ in

Tôi đã tìm kiếm thuật toán của SHA1PRNG, được triển khai trong Lớp SecureRandom của Java. Có ai biết làm thế nào thuật toán này hoạt động chính xác? Tôi chưa tìm thấy nguồn nào mô tả chi tiết thuật toán.

Mục tiêu của tôi là sử dụng nó trong JavaScript, nhưng tôi không tìm thấy bất kỳ triển khai nào, vì vậy tôi phải tự mình thực hiện (chỉ mục đích giáo dục và không sử dụng sản xuất). Nếu ai đó đã triển khai nó rồi thì thật tuyệt nếu lấy nó làm triển khai tham khảo.

lá cờ us
Đây là câu hỏi phù hợp hơn với diễn đàn SO mặc định. Khi nói đến điều đó - tại sao bạn lại muốn sử dụng chính xác cái đó? Bạn có thể tìm thấy [mã nguồn](https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/sun/security/provider/SecureRandom.java), nhưng các nhà cung cấp JVM/JCE khác nhau có thể có cách thực hiện khác nhau. JS đã có một vài thư viện cung cấp số ngẫu nhiên an toàn bằng cách sử dụng hệ thống cơ bản.
Cryptomathician avatar
lá cờ in
@gusto2 cảm ơn bạn đã cung cấp mã nguồn này. Tôi đang thực hiện một dự án cho trường đại học, nơi máy chủ sử dụng lớp này với SHA1PRNG với một hạt giống cụ thể để tạo một cặp khóa cụ thể (ECC, đường cong secp256r1). Để làm việc với máy chủ đó, tôi cần triển khai JavaScript tương ứng.
Cryptomathician avatar
lá cờ in
@ gusto2 Ngoài ra, đối với vấn đề của tôi, tôi muốn biết PRNG này hoạt động chính xác như thế nào, nhưng tôi không tìm thấy bất kỳ tài nguyên tốt nào cho thuật toán này.
Cryptomathician avatar
lá cờ in
@ gusto2 Bạn có biết nơi tôi có thể tìm thấy các triển khai JVM/JCE của nhà cung cấp cụ thể này ở đâu không? Hiện tại tôi đang làm việc trên Linux và với bản cập nhật 241 của Oracle JDK 1.8.0.
lá cờ st
Trong JavaScript, bạn nên sử dụng `Crypto.getRandomValues()` https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues] thay vì cố gắng triển khai CSRNG của riêng bạn
Cryptomathician avatar
lá cờ in
@rmalayter nó chỉ dành cho mục đích giáo dục. Làm sao bạn có thể tìm hiểu về những thứ như vậy nếu bạn không được phép tự mình thử nó trong môi trường phòng thí nghiệm? Nếu mọi người không xem xét nó, sẽ không ai học được điều gì về nó.Vâng, đừng bao giờ xây dựng hệ thống mật mã của riêng bạn, nhưng những người viết mật mã cũng phải bắt đầu từ đâu đó và tìm hiểu về những thứ như vậy.
lá cờ st
@Cryptomathician xin lỗi, câu hỏi của bạn không bao gồm bất kỳ dấu hiệu nào "điều này là dành cho mục đích học tập".Có rất nhiều thách thức khi viết CSRNG trong môi trường JavaScript (trình duyệt). Trước tiên, thu thập entropy ngẫu nhiên một cách an toàn để tạo hạt giống và sau đó cũng ngăn tập lệnh của bên thứ ba hoặc người dùng cuối "nhìn thấy" tài liệu hạt giống của bạn hoặc các số ngẫu nhiên thực tế mà bạn tạo. `Crypto.getRandomValues()` tích hợp sẵn của trình duyệt giải quyết các sự cố này bằng cách sử dụng CSRNG của hệ điều hành trực tiếp thông qua cuộc gọi tòa nhà.
Cryptomathician avatar
lá cờ in
@rmalayter cảm ơn bạn đã giải thích. Có lẽ một câu hỏi tổng quát hơn. Thậm chí có thể viết CSPRNG bằng JavaScript (trình duyệt) để có thể vượt qua những thách thức này mà bạn đã đề cập mà không cần sử dụng CSPRNG bên ngoài trình duyệt không?
lá cờ st
@Cryptomathician tùy thuộc vào nhu cầu bảo mật của ứng dụng; nếu bạn không quan tâm đến việc người dùng cuối nhìn thấy trạng thái hoặc có thể can thiệp vào kết quả đầu ra, về lý thuyết, bạn có thể thu thập entropy từ chuyển động chuột và bàn phím của người dùng, sử dụng hàm băm mật mã để băm chúng thành hạt giống. Tất cả điều này có thể được thực hiện trong một trình duyệt, nhưng người dùng cuối có thể dễ dàng xem hoặc sửa đổi bất kỳ điều gì trong số đó bằng cách nhấn F12 và mở các công cụ dành cho nhà phát triển. Ngay cả khi bạn đã sử dụng `window.crypto.getRandomValues` để thay thế, người dùng cuối có thể chỉ cần chọn không sử dụng các giá trị đó và thay thế giá trị của riêng họ khi thực hiện lệnh gọi POST hoặc API.
Điểm:2
lá cờ us

Mục tiêu của tôi là sử dụng nó trong JavaScript, nhưng tôi không tìm thấy bất kỳ triển khai nào

Bạn có thể tìm thấy mã nguồn, nhưng các nhà cung cấp JVM/JCE khác nhau có thể có cách triển khai khác nhau.

xem: https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/sun/security/provider/SecureRandom.java

Ngoài ra, đối với vấn đề của tôi, tôi muốn biết PRNG này hoạt động chính xác như thế nào

Trên Oracle tài liệu trang SHA1PRNG được mô tả là:

Tên của thuật toán tạo số giả ngẫu nhiên (PRNG) do nhà cung cấp SUN cung cấp. Thuật toán này sử dụng SHA-1 làm nền tảng của PRNG. Nó tính toán hàm băm SHA-1 trên giá trị hạt giống ngẫu nhiên thực được nối với bộ đếm 64 bit được tăng thêm 1 cho mỗi thao tác. Từ đầu ra SHA-1 160 bit, chỉ 64 bit được sử dụng.

Bạn có biết nơi tôi có thể tìm thấy các triển khai JVM/JCE của nhà cung cấp cụ thể này không?

SHA1PRNG dường như được kế thừa cho các phiên bản Java rất sớm, do đó, nó phải là phiên bản tương thích nhất mà bạn có thể nhận được.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.