KLF (Key Locator Framework)

Para cumplir con el estándar de seguridad de datos para el sector de las tarjetas de pago (PCI DSS), se introduce una KLF (Key Locator Framework - Infraestructura de localizador de claves) para permitir que se almacene una clave de cifrado fuera de HCL Commerce. Por ejemplo, la clave de comerciante se puede almacenar y recuperar ahora desde una ubicación configurable como, por ejemplo, un dispositivo externo más seguro. Esto puede hacerse asociando cada clave de cifrado con una clase de proveedor de claves.

Hay dos proveedores de claves que están listos para su uso inmediato.

Proveedores de claves para la clave de comerciante:
  • WCMerchantKeyImpl: almacena la clave de comerciante en el archivo de configuración de instancia.
  • WCExternalFileMerchantKeyImpl: almacena la clave de comerciante en un archivo externo.
Nota: La KLF no da soporte a la definición de una implementación de claves de sesión personalizadas. Esta opción sólo está disponible para claves de comerciante.

Si desea almacenar la clave de cifrado utilizando otro mecanismo, por ejemplo, mediante un dispositivo de hardware, debe crear una clase de proveedor de claves personalizada. Esta clase debe implementar la interfaz WCKey y ampliarse desde la clase abstracta siguiente: WCKeyBaseImpl. Esta clase abstracta implementa algunos de los métodos comunes en la interfaz WCKey. La lista de claves de cifrado disponibles para el sistema se registra en un archivo de configuración de claves.

Para definir un proveedor de claves de comerciante alternativa en un archivo de configuración de claves personalizadas separado, consulte Implementación de KLF.

El archivo de configuración de claves predeterminado es WCKeys.xml, que contiene lo siguiente:

  <key name="MerchantKey"
       providerName="WC"
           status="current"
           className="com.ibm.commerce.security.keys.WCExternalFileMerchantKeyImpl">
    <config name="keyFile" value="merchantKey.xml" />
    <config name="keyEncryptionKeyFile" value="KeyEncryptionKey.xml" />
  </key>

  <key name="SessionKey"
       providerName="WC"
           status="current"
           className="com.ibm.commerce.security.keys.WCSessionKeyImpl">
  </key>

Donde:

name
Nombre de la clave.
providerName
Nombre del proveedor. Puede especificar su propio nombre de proveedor personalizado para hacer referencia al nombre de clase de proveedor personalizado. Esto sólo lo puede modificar la clave de comerciante.
estado
Los valores válidos son "actual" y "nuevo". La mayoría de las veces sólo habrá una clave para cada nombre de clave y dicha clave sólo tendrá el estado "actual". En este caso, la clave se utilizará para cifrar datos nuevos y descifrar datos existentes.

Los valores válidos son "actual", "pendiente" y "nuevo". La mayoría de las veces sólo habrá una clave para cada nombre de clave y dicha clave sólo tendrá el estado "actual". En este caso, la clave se utilizará para cifrar datos nuevos y descifrar datos existentes.

Al ejecutar MigrateEncryptedInfo, debe añadirse una clave adicional con el estado "nuevo" al archivo de configuración de claves.

Si desea cambiar la clave de comerciante mientras el sitio está activo, cambie el estado de la nueva clave de "pendiente" a "nuevo" en el archivo de configuración de claves y luego realizar otra actualización de EAR parcial. Mientras se propaga el cambio, los nodos que ya han seleccionado la clave "nueva" la utilizarán para cualquier cifrado nuevo. Los nodos que aún no han seleccionado la clave "nueva" podrán seguir descifrando los datos nuevos utilizando la clave "pendiente".

Una vez que todos los nodos obtengan la clave "nueva", puede ejecutarse MigrateEncryptedInfo sin problemas en el sitio activo. Cuando MigrateEncryptedInfo finaliza, la clave "actual" puede eliminarse del archivo de configuración de claves y el estado de la clave "nuevo" puede cambiarse a "actual".

className
Clase Java que implementa el proveedor de claves.
version
Opcional: Versión de la clave. Debe especificar una versión si tiene previsto ejecutar el programa de utilidad MigrateEncryptedInfo para cambiar la clave de cifrado mientras el sitio está activo. El programa de utilidad MigrateEncryptedInfo descifra los datos cifrados con la clave "actual" y vuelve a cifrarlos con la clave "nueva". Cuando el sitio está activo y se ejecuta el programa de utilidad, HCL Commerce debe tener un modo de diferencia datos cifrados con la clave "actual" de los datos cifrados con la "nueva" clave. Es por ello que debe especificar un número de versión exclusivo para asociarlo con cada clave utilizando el parámetro version. Al cifrar los datos mediante una clave con versión, el proveedor de cifrado ActiveProvider añade un sufijo a los datos en sí utilizando esta convención: _IBM_n. Por ejemplo, _IBM_3 indica que los datos se han cifrado con la versión 3 de la clave de cifrado. El programa de utilidad añade los datos con este sufijo en texto sin formato, por ejemplo: yXiW3W4iblU=_IBM_3. Los datos cifrados antes de introducir la versión no tienen este sufijo y se asocian con una clave que no tiene versión. Al cifrar los datos en tiempo de ejecución, se utiliza el proveedor de claves "nuevas" si se ha definido. Si no se ha definido ninguna clave "nueva", se utiliza la clave "actual" que presenta la versión más alta.
config
Opcional: Parámetros que son necesarios para el proveedor, por ejemplo, el nombre de un archivo de configuración.
algorithm
Algoritmo para la clave de comerciante. Los valores válidos son "AES" y "3DES". Si está ejecutando el mandato MigrateEncryptedInfo por primera vez para migrar el cifrado de 3DES a AES, establezca este valor en AES. Si no se especifica el parámetro algorithm para la clave de comerciante, se comprueba el parámetro AES_DB en el archivo siguiente para determinar si se utiliza AES:

Una vez que se registran las claves de cifrado en el archivo de configuración de claves, la clave WCKeyRegistry se utiliza para leer este archivo y almacena en memoria caché todos los proveedores de claves en la memoria.

Puede utilizar los métodos getKey(strKeyName) y getNewKey(strKeyName) de WCKeyRegistry para recuperar el proveedor de claves actual y nueva.

Por ejemplo, para recuperar la clave "actual" con un nombre determinado, puede utilizar el siguiente fragmento de código:
WCKey key = WCKeyRegistry.getInstance().getKey(<name of the key>); 
String keyValue = key.getValueAsString();
Para recuperar la clave "nueva" con un nombre y proveedor determinados, utilice:
WCKey newKey = WCKeyRegistry.getInstance().getNewKey(<name of the key>, <name of the provider>); 
String newKeyValue = newKey.getNewValueAsString();
Los métodos principales WCKeyRegistry son los siguientes:
  • getKey(strKeyName) devuelve la clave "nueva" si existe o la clave "actual" que presenta la versión más alta
  • getCurrentKeys() devuelve las claves actuales
  • getNewKey() devuelve la clave nueva si se ha definido