API C/C
HSM Dinamo
|
Gestión de secretos compartidos.
Las API del módulo Custodia están diseñadas para facilitar la gestión de los secretos custodiados, también conocidos como Parámetros Críticos de Seguridad (CSP).
Dentro del módulo Safe Keeping, es posible llevar a cabo la custodia compartida de secretos almacenados en el HSM. Estos secretos se generan con alta seguridad, en hardware homologado, garantizando una alta entropía y protección frente a diversos ataques, incluidos los de canal lateral.
El módulo de mantenimiento de la seguridad funciona en 3 etapas.
En esta fase, el secreto se genera en una partición (usuario) del HSM, de forma segura y con alta entropía, y sólo existe en el HSM.
Cada partición tiene autenticación de credenciales con un nombre de usuario y una contraseña, y opcionalmente se puede configurar autenticación adicional, como por ejemplo:
Puede combinar uno o más tipos de autenticación de partición según sea necesario.
El secreto puede generarse en función de varios niveles de seguridad y de las necesidades del proyecto. Debe elegirse con cuidado para que el nivel de seguridad sea equivalente en otros puntos del proyecto. Un nivel de seguridad demasiado bajo puede debilitar la seguridad de los datos que se protegen, mientras que un nivel de seguridad demasiado alto puede ralentizar innecesariamente las operaciones.
Consulte el cuadro siguiente para hacerse una idea.
Nivel de seguridad | Tamaño en bytes | Cantidad física correspondiente |
---|---|---|
64 bits | 8 | Granos de arena en la Tierra. |
96 bits | 12 | Los átomos en el cuerpo humano. |
112 bits | 14 | Diámetro del universo observable en milésimas de milímetro. |
128 bits | 16 | Átomos de oxígeno en la atmósfera terrestre. |
160 bits | 20 | Átomos en la Tierra. |
En esta etapa, laspartes del secreto se dividen utilizando el algoritmo de Shamir (Shamir Shared Secret) en el esquema M de N.
El esquema M de N significa que a partir de un grupo de N partes, se necesitan M partes para recomponer el secreto.
Las partes, también conocidas como acciones o sombras, se generan de tal forma que es imposible recomponer el secreto con menos de M partes.
La generación de piezas suele hacerse en una ceremonia, en la que cada pieza se distribuye a un miembro de la organización y se almacena de forma segura. De este modo se evita la connivencia entre los miembros de la organización. La forma en que se distribuyen las piezas, la elección de los miembros y otros detalles de la ceremonia se definen en función de cada empresa.
Las partes son ligeramente más grandes que el nivel de seguridad porque contienen metadatos del esquema M de N. Cada parte está disponible en formato Base62 para facilitar la anotación.
Se recomienda generar sumas de comprobación para cada parte en este punto. Esto facilita la comprobación de la tipificación de las partes en el momento de la recuperación.
El secreto se recompone utilizando M de las N partes generadas en el paso anterior.
En este caso, se celebra una ceremonia de recuperación del secreto. Es necesario que cada custodio (titular de una acción) introduzca su acción para recuperar el secreto. Esta ceremonia se define en función de cada acuerdo.
El secreto varía de tamaño en función del nivel de seguridad utilizado, y está disponible en formato Base62 para facilitar las anotaciones.
Se recomienda comprobar las sumas de comprobación de cada parte en este punto. Esto evita errores de escritura en un momento crítico.
Consulte la API a continuación y los ejemplos para facilitar la implementación.
Gestión de secretos compartidos. Más...
Definiciones y macros | |
#define | DN_SKEEP_LEVEL_UNKNOWN (0) |
#define | DN_SKEEP_SEC_LEVEL_64b (1) |
#define | DN_SKEEP_SEC_LEVEL_96b (2) |
#define | DN_SKEEP_SEC_LEVEL_112b (3) |
#define | DN_SKEEP_SEC_LEVEL_128b (4) |
#define | DN_SKEEP_SEC_LEVEL_160b (5) |
#define | DN_SKEEP_TYPE_NMIND (0) |
#define | DN_SKEEP_TYPE_SCRD (1) |
#define | DN_SKEEP_TYPE_2FA (2) |
#define | DN_SKEEP_TYPE_CRT (4) |
#define | DN_SKEEP_SHARE_CKS_LEN (4) |
#define | DN_SKEEP_GEN_SHARE_CKS (1) |
Funciones | |
int AAP_API | DSKeepNewSecret(HSESSIONCTX hSession, const char *cszId, BYTE bSecLevel, WORD wAuthType, DWORD dwReserved) |
int AAP_API | DSKeepSplitSecret(HSESSIONCTX hSession, const char *cszId, BYTE bSecLevel, WORD wAuthType, BYTE bM, BYTE bN, SKeepShare *pstShares, DWORD dwReserved) |
int AAP_API | DSKeepProbeSecret(HSESSIONCTX hSession, const char *cszId, SKeepProbeInfo *pstInfo, DWORD dwReserved) |
int AAP_API | DSKeepMatchSecret(HSESSIONCTX hSession, const char *cszId, const SKeepShare *cpstShares, DWORD dwSharesCount, DWORD dwReserved) |
int AAP_API | DSKeepRecoverSecret(HSESSIONCTX hSession, const char *cszId, const SKeepShare *cpstShares, DWORD dwSharesCount, SKeepRecoverInfo *pstRecoverInfo, DWORD dwReserved) |
int AAP_API | DSKeepRemoveSecret(HSESSIONCTX hSession, const char *cszId, BYTE bSecLevel, WORD wAuthType, DWORD dwReserved) |
int AAP_API | DSKeepCalcShareCks(DWORD dwType, const char *cszShare, char *szCks) |
#define DN_SKEEP_LEVEL_UNKNOWN (0) |
#include <dinamo.h>
Nivel de seguridad desconocido. Utilizado en DSKeepProbeSecret().
#define DN_SKEEP_SEC_LEVEL_64b (1) |
#include <dinamo.h>
Nivel de seguridad de 64 bits.
#define DN_SKEEP_SEC_LEVEL_96b (2) |
#include <dinamo.h>
Nivel de seguridad de 96 bits.
#define DN_SKEEP_SEC_LEVEL_112b (3) |
#include <dinamo.h>
Nivel de seguridad de 112 bits.
#define DN_SKEEP_SEC_LEVEL_128b (4) |
#include <dinamo.h>
Nivel de seguridad de 128 bits.
#define DN_SKEEP_SEC_LEVEL_160b (5) |
#include <dinamo.h>
Nivel de seguridad de 160 bits.
#define DN_SKEEP_TYPE_NMIND (0) |
#include <dinamo.h>
No limita el tipo de autenticación.
#define DN_SKEEP_TYPE_SCRD (1) |
#include <dinamo.h>
Partición con M de N autenticación.
#define DN_SKEEP_TYPE_2FA (2) |
#include <dinamo.h>
Partición con autenticación OATH.
#define DN_SKEEP_TYPE_CRT (4) |
#include <dinamo.h>
Partición con autenticación X.509.
#define DN_SKEEP_SHARE_CKS_LEN (4) |
#include <dinamo.h>
Tamaño del valor de verificación (cuota) de una parte.
#define DN_SKEEP_GEN_SHARE_CKS (1) |
#include <dinamo.h>
Genera el valor de verificación de una acción.
int AAP_API DSKeepNewSecret | ( | HSESSIONCTX | hSesión, |
const char * | cszId, | ||
BYTE | bSecLevel, | ||
PALABRA | wAuthType, | ||
DWORD | dwReservado ) |
#include <dinamo.h>
Cree un nuevo secreto utilizando el módulo Guardado Seguro.
[en] | hSesión | Contexto adquirido a través de la función DOpenSession(). | ||||||||||||||||||||||||||||
[en] | cszId | Identificador del objeto que se va a crear en el HSM. Véase szKeyId en DGenerateKey() para obtener más información sobre el tamaño máximo de los identificadores. | ||||||||||||||||||||||||||||
[en] | bSecLevel | Nivel de seguridad. Puede ser una de las opciones siguientes.
|
[en] | wAuthType | Tipo de autenticación requerida por la partición secreta. Puede ser uno o una combinación de los valores siguientes.
| ||||||||||
[en] | dwReservado | Reservado para uso futuro (debe ser 0). |
int AAP_API DSKeepSplitSecret | ( | HSESSIONCTX | hSesión, |
const char * | cszId, | ||
BYTE | bSecLevel, | ||
PALABRA | wAuthType, | ||
BYTE | bM, | ||
BYTE | bN, | ||
SKeepShare * | pstShares, | ||
DWORD | dwReservado ) |
#include <dinamo.h>
Divide M de N en secreto. Según el estándar de compartición de secretos de Shamir.
[en] | hSesión | Contexto adquirido a través de la función DOpenSession(). |
[en] | cszId | Identificador del objeto en el HSM. |
[en] | bSecLevel | Nivel de seguridad. Ver opciones en DSKeepNewSecret(). |
[en] | wAuthType | Tipo de autenticación requerida por la partición secreta. Ver opciones en DSKeepNewSecret(). |
[en] | bM | Número mínimo de acciones necesarias para reconstruir el secreto. Debe ser mayor o igual que DN_SKEEP_M_OF_N_S_MIN y menor o igual que DN_SKEEP_M_OF_N_S_MAX. |
[en] | bN | Número de acciones a generar. Debe ser mayor o igual que DN_SKEEP_M_OF_N_S_MIN y menor o igual que DN_SKEEP_M_OF_N_S_MAX. |
[fuera] | pstShares | Vector de estructura SKeepShare que recibirá las acciones generadas. El tamaño de este vector debe ser bN elementos.
|
[en] | dwReservado | Reservado para uso futuro (debe ser 0). |
int AAP_API DSKeepProbeSecret | ( | HSESSIONCTX | hSesión, |
const char * | cszId, | ||
SKeepProbeInfo * | pstInfo, | ||
DWORD | dwReservado ) |
#include <dinamo.h>
Recuperar información de un secreto.
[en] | hSesión | Contexto adquirido a través de la función DOpenSession(). |
[en] | cszId | Identificador del objeto en el HSM. |
[fuera] | pstInfo | Estructura que recibirá la información del secreto. Recibe una estructura SKeepProbeInfo. |
[en] | dwReservado | Reservado para uso futuro (debe ser 0). |
int AAP_API DSKeepMatchSecret | ( | HSESSIONCTX | hSesión, |
const char * | cszId, | ||
const SKeepShare * | cpstShares, | ||
DWORD | dwSharesCount, | ||
DWORD | dwReservado ) |
#include <dinamo.h>
Comprueba que las acciones de un secreto son válidas.
[en] | hSesión | Contexto adquirido a través de la función DOpenSession(). |
[en] | cszId | Identificador del objeto en el HSM. |
[en] | cpstShares | Vector de estructura SKeepShare que contiene las acciones del secreto. El número de elementos de este vector debe introducirse en dwSharesCount . La cantidad de este buffer debe ser la cantidad de M piezas. |
[en] | dwSharesCount | Número de pstShares . |
[en] | dwReservado | Reservado para uso futuro (debe ser 0). |
int AAP_API DSKeepRecoverSecret | ( | HSESSIONCTX | hSesión, |
const char * | cszId, | ||
const SKeepShare * | cpstShares, | ||
DWORD | dwSharesCount, | ||
SKeepRecoverInfo * | pstRecoverInfo, | ||
DWORD | dwReservado ) |
#include <dinamo.h>
Recuperar un secreto a partir de sus partes (compartir).
[en] | hSesión | Contexto adquirido a través de la función DOpenSession(). |
[en] | cszId | Identificador del objeto en el HSM. |
[en] | cpstShares | Vector de estructura SKeepShare que contiene las acciones del secreto. El número de elementos de este vector debe introducirse en dwSharesCount . La cantidad de este buffer debe ser la cantidad de M piezas. |
[en] | dwSharesCount | Número de pstShares . |
[fuera] | pstRecoverInfo | Estructura que recibirá la información secreta. Recibe una estructura SKeepRecoverInfo. |
[en] | dwReservado | Reservado para uso futuro (debe ser 0). |
int AAP_API DSKeepRemoveSecret | ( | HSESSIONCTX | hSesión, |
const char * | cszId, | ||
BYTE | bSecLevel, | ||
PALABRA | wAuthType, | ||
DWORD | dwReservado ) |
#include <dinamo.h>
Eliminar un secreto.
[en] | hSesión | Contexto adquirido a través de la función DOpenSession(). |
[en] | cszId | Identificador del objeto en el HSM. |
[en] | bSecLevel | Nivel de seguridad. Ver opciones en DSKeepNewSecret(). |
[en] | wAuthType | Tipo de autenticación requerida por la partición secreta. Ver opciones en DSKeepNewSecret(). |
[en] | dwReservado | Reservado para uso futuro (debe ser 0). |
#include <dinamo.h>
Genera el valor de verificación de una acción.
[en] | dwType | Tipo de operación. Puede ser uno de los valores siguientes.
| ||||
[en] | cszCompartir | Buffer que contiene la parte del secreto. | ||||
[fuera] | szCks | Buffer que recibirá el valor de comprobación. El tamaño de este búfer debe ser DN_SKEEP_SHARE_CKS_LEN + 1. |