Disclaimer: Der Post ist 100 Jahre alt, aber wo ich ihn nun gerade in den Entwürfen finde…:
The Legion of the Bouncy Castle bietet mit bc-fips
FIPS 140-2-zertifizierte Security Provider an, und zu der umfangreichen Dokumentation gibt es ein paar Good-to-knows:
- der Provider muss per
Security.addProvider(new BouncyCastleFipsProvider());
hinzugefügt werden; perSecurity.insertProviderAt(new BouncyCastleFipsProvider(), 1)
(die Position ist 1-based) gibt es eine RuntimeException: “Could not merge Java truststore with system truststore” - im o.g. PDF liest man häufig
EC.generateKeyPair()
, die Methode gibt es so nicht. Stattdessen gibt es einegenerateKeyPair()
unter Beispiel 31 im selben PDF:
1 2 3 4 5 |
public static KeyPair generateKeyPair() throws GeneralSecurityException { KeyPairGenerator keyPair = KeyPairGenerator.getInstance("EC", "BCFIPS"); keyPair.initialize(384); return keyPair.generateKeyPair(); } |
- Speziell unter Linux kann das Hochfahren der App sehr lange dauern, der Grund scheint
/dev/random
zu sein; einapt install haveged
hilft - Die Beispiele basieren auf EC(DSA), es geht aber auch RSA. Dazu nehme man (ansonsten analog):
1 2 3 4 5 6 7 8 9 |
// key pair: KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "BCFIPS"); generator.initialize(2048); return generator.generateKeyPair(); // content signer: new JcaContentSignerBuilder("SHA256WithRSA") .setProvider("BCFIPS") .build(privateKey); |
- PS: Bei einem uninitialized KeyStore hilft vermutlich ein
keyStore.load(null, null);
(Danke, Nils!)
HTH