2012-04-21 28 views
5

Tôi đang cố gắng để tạo ra số ngẫu nhiên mã hóa an toàn sử dụng Java và sử dụng phần mã sau để tạo ra một đối tượng SecureRandom để xem nhà cung cấp và thuật toán của nó:BouncyCastle có dịch vụ SecureRandom không?

Provider prov=new org.spongycastle.jce.provider.BouncyCastleProvider(); 
Security.insertProviderAt(prov, 1); 

SecureRandom sr=new SecureRandom(); 
srProvider=sr.getProvider().toString(); 
srAlgorithm=sr.getAlgorithm(); 

(lâu đài xốp là bouncy castle tương đương cho android do Roberto Tyley - https://github.com/rtyley)

Khi tôi hiển thị cung cấp và thuật toán, nó cho thấy: Crypto phiên bản 1.0 SHA1PRNG

gì làm tôi ngạc nhiên là các nhà cung cấp không Spongycastle ngay cả khi nó được cài đặt là nhà cung cấp đầu tiên trong mã . Tôi muốn hỏi bạn a) Không phải SecureRandom được thực hiện tại Lâu đài Spongy (hay Lâu đài Bouncy). b) Điều gì "Crypto phiên bản 1.0" chính xác là (Tôi có nghĩa là nó cung cấp Sun JCE hoặc những gì?)

Thanks ...

Rubi

Trả lời

3

Giả sử bạn đang chạy trên Android (bạn không nêu rõ điều này). Lâu đài Bouncy không cung cấp triển khai SecureRandom. 'Crypto' là Apache Harmony (trên đó hầu hết mã Java lõi của Android được dựa trên) nhà cung cấp JCE. Không có mã Sun JCE trong Android. BTW, nhà cung cấp 'Crypto' chỉ cung cấp các triển khai SHA1PRNG (RNG), SHA-1 (băm) và SHA1withDSA (chữ ký). Mọi thứ khác được cung cấp bởi Bouncy Castle hoặc nhà cung cấp dựa trên OpenSSL.

Câu hỏi: Tại sao bạn cho rằng bạn cần thực hiện SecureRandom từ Lâu đài Bouncy/Spongy?

+0

Cảm ơn Nikolay. Chỉ muốn biết nếu SHA1PRNG có thay thế hay không. Nó sẽ là tốt để kiểm tra SHA1PRNG và những người khác trong các công cụ kiểm tra ngẫu nhiên. –

+0

Ít nhất là trên ICS (cổ phiếu Galaxy Nexus) là triển khai duy nhất 'SecureRandom'. SHA1PRNG là một PRNG vì vậy nó chỉ tốt như hạt giống bạn cho nó. Và nó được gieo từ '/ dev/urandom', vì vậy nó có thể không tuyệt vời như vậy. Một lần nữa, điều này là dành cho ICS, nhưng tôi nghi ngờ nó sẽ khác nhau trên các phiên bản khác. '/ dev/random' có thể rất chậm trên Android, vì vậy tôi đoán đó là lý do tại sao nó không được sử dụng. Do liên kết nó ở đây nếu bạn thực sự kiểm tra với một công cụ. –

+0

@ Nikolay Elenkov: Cảm ơn thông tin.Làm thế nào tôi có thể nhìn thấy nếu dev/ngẫu nhiên hoặc dev/urandom được sử dụng trên thiết bị Android của tôi như là nguồn giống và làm thế nào tôi có thể thay đổi nó động trong mã của tôi? –

2

Lâu đài Bouncy không cung cấp một bộ Pseudo Trình tạo số ngẫu nhiên (PRNG). Có nhiều tên cho PRNG; NIST gọi chúng là Xác định Trình tạo bit ngẫu nhiên (DRBG). Tuy nhiên, chúng chỉ có sẵn trong API "Nhẹ" của Lâu đài Bouncy, trong gói org.bouncycastle.crypto.prng.

Tuy nhiên, Lâu đài Bouncy là một triển khai phần mềm chỉ thực hiện các thuật toán mã hóa. Điều này có nghĩa là nó không chứa nguồn cho entropy. Entropy không thể được tạo ra bởi phần mềm một mình như các thuật toán phần mềm tự xác định. Vì vậy, ngay cả khi nhà cung cấp Bouncy Castle sẽ đăng ký một số máy phát điện trong nhà cung cấp "BC" (hoặc nhà cung cấp Spongy cho Android) thì nó vẫn sẽ phải dựa vào cùng nguồn entropy làm nền tảng thực hiện SecureRandom.

Vì nguồn entropy có khả năng là thủ phạm đối với hầu hết các vấn đề về hiệu năng, bạn không nên kỳ vọng lâu đài Bouncy liên quan đến hiệu quả tạo số ngẫu nhiên.

Hiện tại (v1.54) nhà cung cấp Lâu đài Bouncy không đăng ký bất kỳ triển khai SecureRandom nào cả, do đó, có điều đó.

+1

Có vẻ như Bouncy Castle 1.57 đang đăng ký triển khai 'SecureRandom'. – martijno

Các vấn đề liên quan