API Java
HSM Dinamo
Cargando...
Buscando...
No se han encontrado entradas
GenerateSVMK.java

Ejemplo de generación de una SVMK (clave maestra secreta) con el esquema M de N (compartición de secretos de Shamir) y reconstrucción de la clave a partir de las «shadows».

Véase la nota sobre ejemplos.
package doxy.examples;
import com.dinamonetworks.Dinamo;
import com.dinamonetworks.SvmkShadow;
import br.com.trueaccess.TacException;
import br.com.trueaccess.TacNDJavaLib;
public class GenerateSVMK {
public static void main(String[] args) throws TacException {
String ip = "127.0.0.1";
String user = "master";
String password = "12345678";
/*
* Sessão anônima é suficiente para gerar e recuperar a SVMK.
* Substituir user/password pelo token anônimo caso necessário.
*/
Dinamo api = new Dinamo();
api.openSession(ip, user, password);
try {
int M = 2; // mínimo de shadows para reconstrução
int N = 3; // total de shadows geradas
// Gera a SVMK versão 2 e divide em N partes de forma segura no HSM.
// Passando null, o segredo é gerado randomicamente pelo HSM (recomendado).
SvmkShadow[] shadows = api.generateSVMK(
TacNDJavaLib.DN_SC_M_OF_N_SHADOW_V2_TYPE, null, M, N);
System.out.printf("SVMK gerada e dividida em %d shadows (%d de %d para reconstrução).%n",
N, M, N);
for (int i = 0; i < shadows.length; i++) {
System.out.printf(" Shadow [%d]: versão=%d tamanho=%d bytes%n",
i, shadows[i].getVersion(), shadows[i].getShadow().length);
}
// Simula a entrega de M shadows pelos custodiantes e reconstrói a chave.
SvmkShadow[] subset = new SvmkShadow[M];
System.arraycopy(shadows, 0, subset, 0, M);
byte[] recoveredKey = api.recoverSVMK(subset);
System.out.printf("%nChave SVMK reconstruída (%d bytes): %s%n",
recoveredKey.length, toHex(recoveredKey));
} finally {
api.closeSession();
}
}
private static String toHex(byte[] data) {
StringBuilder sb = new StringBuilder(data.length * 2);
for (byte b : data) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
}