2014-10-09 19 views
5

Tôi có một chìa khóa thạc sĩ trong một HSM và tôi muốn lấy được nó với một sự đa dạng hóa nhất định. Tôi khá mới với JCA/JCE, và một chút bị mất với KeyGenerator, SecretKeyFactory, ... đặc biệt là vì tất cả các tham số là chuỗi. Tôi muốn sử dụng AES hoặc HmacSha1. Có vẻ như tôi cần sử dụng SecretKeyFactory và cung cấp KeySpec. Nhưng loại KeySpec nào?Làm thế nào để lấy được một chìa khóa với JCA/JCE và với một HSM

(Tôi đã thấy bài đăng về chủ đề đó, nhưng dường như không phải HSM đã được sử dụng.)

Cảm ơn.

Trả lời

2

Bạn có thể lấy được chìa khóa sử dụng:

để sử dụng HSM từ API JCA/JCE, bạn cần thêm nhà cung cấp tương ứng vào API JCA/JCE và sau đó chỉ định tham số provider để yêu cầu nhà cung cấp cụ thể đó triển khai trên.

Ví dụ:

int slot = 0; 
Provider provider = new au.com.safenet.crypto.provider.SAFENETProvider(slot); 
Security.addProvider(provider); 
final String PROVIDER = provider.getName(); // "SAFENET", "SAFENET.1", ... 

KeyGenerator keyGen = KeyGenerator.getInstance("DESede", PROVIDER); 
Key baseKey = keyGen.generateKey(); 

Cipher desCipher = Cipher.getInstance("DESede/CBC/PKCS5Padding", PROVIDER); 
desCipher.init(Cipher.ENCRYPT_MODE, baseKey); 

byte[] derived = desCipher.doFinal("diversification data".getBytes()); 

Note rằng nếu bạn cần làm nguồn gốc quan trọng rất thường xuyên, bạn có thể cân nhắc sử dụng PCKS của nhà cung cấp # 11 wrapper cho Java (ví dụ jcprov của SafeNet) hoặc các API khác để bạn có thể hiểu rõ hơn về quản lý phiên của nó và hiệu quả hơn về việc sử dụng tài nguyên.

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