¿Tiene BouncyCastle un servicio SecureRandom?
Estoy tratando de generar números aleatorios criptográficamente seguros usando Java y usando la siguiente sección de código para crear un objeto SecureRandom para ver su proveedor y algoritmo:
Provider prov=new org.spongycastle.jce.provider.BouncyCastleProvider(); Security.insertProviderAt(prov, 1); SecureRandom sr=new SecureRandom(); srProvider=sr.getProvider().toString(); srAlgorithm=sr.getAlgorithm();
(Castillo esponjoso es equivalente al castillo inflable para android hecho por Roberto Tyley – https://github.com/rtyley )
- Super.onCreateView en Fragmentos
- Realm.io no puede conseguir ejemplos para trabajar
- Analytic dispatcher y gestión de configuración para uso personalizado
- Android: cómo mostrar la vista previa de la cámara con devolución de llamada?
- ¿Cómo obtener bar clic evento de gráficos horizontalbar de MPcharts en android?
Cuando se muestra el proveedor y el algoritmo, se muestra: Crypto versión 1.0 SHA1PRNG
Lo que me sorprende es que el proveedor no es Spongycastle, incluso si se instala como el primer proveedor en el código. Me gustaría preguntarle a) ¿No se implementa SecureRandom en Spongy Castle (o Bouncy Castle)? B) ¿Qué "Crypto versión 1.0" es exactamente (me refiero es Sun JCE proveedor o qué?)
Gracias…
Rubí
- Compruebe si la actividad se ha iniciado en el servicio
- Hacer un temporizador de intervalo en Java android
- Cómo deshabilitar / activar jackson SerializationFeature.WRAP_ROOT_VALUE?
- Uso de MessagePack con Android
- Adición de fotos a la galería en Google Play Kiosco
- ¿Cómo añado iconos a la plantilla de gavetas de navegación de Android Studio?
- Cómo utilizar Iniciar sesión en Android
- Algo falta en mi proyecto de prueba de Android?
Asumiendo que usted está funcionando en Android (usted no lo dijo explícitamente). Bouncy Castle no proporciona una implementación SecureRandom
. 'Crypto' es la armonía de Apache (en la que se basa la mayor parte del código Java básico de Android) proveedor JCE. No hay código Sun JCE en Android. BTW, el proveedor 'Crypto' sólo proporciona implementaciones SHA1PRNG (RNG), SHA-1 (hash) y SHA1withDSA (firma). Todo lo demás es proporcionado por Bouncy Castle o el proveedor basado en OpenSSL.
Pregunta: ¿Por qué crees que necesitas una implementación de SecureRandom
desde Bouncy / Spongy Castle?
Bouncy Castle proporciona un conjunto de Generadores de Número Pseudo Aleatorio (PRNGs). Hay muchos nombres para PRNG; NIST los llama generadores de bits aleatorios deterministas (DRBGs). Sin embargo, sólo están disponibles en la API "ligera" de Bouncy Castle, en el paquete org.bouncycastle.crypto.prng
.
Sin embargo, Bouncy Castle es una implementación sólo de software de algoritmos criptográficos. Esto significa que no contiene una fuente de entropía . La entropía no puede ser generada por el software solo ya que los propios algoritmos de software son deterministas. Así que incluso si el proveedor Bouncy Castle registrara algunos de los generadores en su proveedor "BC"
(o proveedor de Spongy para Android), entonces todavía tendría que confiar en la misma fuente de entropía que la implementación de la plataforma SecureRandom
.
Como la fuente de entropía es probablemente el culpable de la mayoría de los problemas de rendimiento, no debe esperar maravillas de Bouncy Castle con respecto a la eficiencia de generación de números aleatorios.
Actualmente (v1.54) el proveedor Bouncy Castle no registra ninguna implementación de SecureRandom
en absoluto, así que hay eso.