Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Balizas
| Se cambió el nombre de nuestra biblioteca de cifrado del lado del cliente por el de SDK de cifrado de AWS bases de datos. En esta guía para desarrolladores, se sigue proporcionando información sobre el cliente de cifrado de DynamoDB. |
Una baliza es una etiqueta de código de autenticación de Hash-Based mensajes (HMAC) truncada que asigna un valor de campo de texto simple a un identificador cifrado que permite realizar búsquedas y que se almacena junto con los datos cifrados de la base de datos. La baliza no altera el estado cifrado del campo. Al escribir un valor en un campo configurado para el cifrado con capacidad de búsqueda, el SDK de cifrado de bases de datos de AWS calcula un HMAC sobre el valor de texto sin formato y deriva la baliza en el contexto de una partición. El HMAC completo corresponde únicamente al valor del texto sin formato, pero el SDK trunca intencionadamente la salida para que varios valores distintos de texto sin formato puedan asignarse a la misma baliza. Estas colisiones (falsos positivos) limitan la capacidad de un usuario no autorizado de deducir información distintiva sobre el texto sin formato subyacente.
nota
Un código de autenticación de Hash-based mensajes (HMAC) es una función hash criptográfica con clave que se utiliza habitualmente para proporcionar integridad y autenticidad. En los sistemas de cifrado con capacidad de búsqueda, el HMAC se suele utilizar para derivar balizas de forma determinista a partir de valores de texto sin formato, de forma que puedan indexarse y consultarse.
Un HMAC completo es determinista: para una clave determinada, el mismo valor de texto plano siempre produce la misma baliza. Este determinismo da como resultado un mapeo uno a uno entre los valores de texto plano y las balizas, preservando la distribución de frecuencia original de los datos. Todos los registros que comparten el mismo valor de texto plano se asignan a la misma baliza y, por lo tanto, forman una clase de equivalencia. El tamaño de cada clase de equivalencia refleja directamente la frecuencia con la que aparece el valor de texto sin formato correspondiente en el conjunto de datos.
Esta conservación de la frecuencia permite realizar ataques de análisis de frecuencia, en los que un observador deduce valores probables en texto plano correlacionando las frecuencias de baliza observadas con las distribuciones de datos conocidas o esperadas.
Para mitigar los ataques de análisis de frecuencia, el SDK obtiene balizas mediante el truncamiento y la partición. Al truncar el HMAC se introducen colisiones controladas, de modo que no todos los registros de una clase de equivalencia comparten necesariamente el mismo valor de baliza. Además, la incorporación de un identificador de partición en la derivación de balizas permite asignar valores idénticos de texto plano a diferentes balizas en las particiones. En conjunto, estas técnicas promueven una mayor aleatoriedad para conjuntos de datos distribuidos de manera desigual, al tiempo que preservan un comportamiento de consulta correcto y eficiente.
Las balizas solo se pueden crear a partir de campos marcados o SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT en ENCRYPT_AND_SIGN tus SIGN_ONLY acciones criptográficas. La baliza en sí no está firmada ni cifrada. No se puede construir una baliza con campos marcados DO_NOTHING.
Después de configurar las balizas, debe configurar un índice secundario para cada baliza antes de poder buscar en los campos cifrados. Para obtener más información, consulte Configurar índices secundarios con balizas.
Comprensión de la derivación de balizas entre particiones
La partición es una parte fundamental de la configuración de las balizas y se aplica a todas las balizas, incluidas las que utilizan una sola partición. Este modelo garantiza una derivación de balizas coherente y compatible con el futuro de todos los datos, y permite aumentar el número de particiones a lo largo del tiempo a medida que cambia el volumen o la distribución de los datos. De este modo, puede reducir la pérdida de frecuencia y reforzar las protecciones para los conjuntos de datos distribuidos de forma desigual sin tener que volver a escribir los elementos existentes.
Las particiones introducen una aleatoriedad controlada al distribuir los elementos entre varios grupos lógicos. Esto reduce la pérdida de frecuencia, limita el tamaño de las clases de equivalencia de balizas y mejora la seguridad y la privacidad de los atributos con distribuciones asimétricas.
Cuando se asigna un elemento a una partición, el número de partición se incorpora a la derivación de balizas. Dentro de la misma partición, los valores de texto plano idénticos producen la misma baliza, lo que preserva la semántica de búsqueda igualitaria. En distintas particiones, el mismo valor de texto sin formato produce valores de baliza diferentes. Esto divide las clases de equivalencia grandes en grupos más pequeños por partición y ayuda a aplanar la distribución general de frecuencias de las balizas.
Usted tiene el control total sobre cómo se asigna cada elemento de la base de datos a una partición. Los elementos se pueden colocar en particiones específicas de forma determinista o se pueden distribuir de forma aleatoria para ayudar a suavizar las distribuciones desiguales de los datos. La asignación aleatoria es especialmente útil para valores de alta frecuencia, ya que distribuye esos valores entre varias particiones y reduce la concentración visible en cualquier partición individual. La asignación determinista se puede utilizar cuando el conocimiento del dominio indica que ciertos valores deben restringirse a un menor número de particiones.
El identificador de la partición no está expuesto en el registro cifrado. En su lugar, el número de partición se incorpora al proceso de derivación de la baliza (se agrupa junto con el valor en texto plano) para que no se pueda deducir examinando los datos cifrados o la propia baliza. Este diseño garantiza que las asignaciones de particiones permanezcan confidenciales y, al mismo tiempo, proporciona los beneficios de distribución y privacidad de las balizas particionadas.
- El impacto de la partición en las consultas
-
El particionamiento afecta a la forma en que se realizan
Querylas operaciones. Como las consultas de DynamoDB requieren una coincidencia exacta con el valor de baliza indexado y los valores de baliza difieren entre las particiones, la persona que llama debe consultar cada partición de forma independiente. Si una tabla tiene particiones:N-
La recuperación de todos los elementos coincidentes requiere consultas
Nindependientes. -
Solo
Queryse ve afectado. -
ScanyGetlas operaciones se comportan como antes.
El motivo es estructural:
Scanlee todos los elementos yGetfunciona con una clave específica; soloQuerydepende de la igualdad exacta en el índice, que pasa a ser específico de la partición.nota
Fan-out hace referencia al número de consultas de DynamoDB que se deben emitir para satisfacer una única solicitud lógica cuando se utilizan balizas particionadas. El sistema proporciona una distribución limitada, lo que significa que el número máximo de consultas a nivel de partición es fijo y predecible en función del número de particiones configurado.
Consideraciones sobre el rendimiento
El uso de particiones afecta al número de consultas de DynamoDB necesarias por solicitud lógica. El impacto en el rendimiento depende del tamaño del resultado esperado:
-
Conjuntos de resultados grandes: cuando las consultas devuelven muchas páginas, las consultas adicionales a nivel de partición suponen una pequeña sobrecarga.
-
Single-item Búsquedas: si una solicitud normalmente devuelve un elemento y se configuran cinco particiones, se emiten cinco consultas (cuatro no devuelven ningún resultado), lo que provoca una ralentización casi lineal.
-
Localidad reducida: los objetos pueden estar repartidos entre las particiones, lo que aumenta el tiempo de recuperación.
Como cada partición desencadena una consulta adicional, la distribución es un factor importante a la hora de planificar el rendimiento y la capacidad.
Ventajas de rendimiento
A pesar de la sobrecarga adicional de consultas, las particiones pueden mejorar el rendimiento en algunos escenarios:
-
Reducir las clases de equivalencia grandes: cuando un valor poco común comparte una baliza truncada con un valor que aparece con frecuencia, las consultas del valor poco común deben procesar muchas coincidencias irrelevantes. La partición limita el tamaño de cada clase de equivalencia y reduce esta sobrecarga.
-
Soporta longitudes de baliza más largas: configurar más particiones puede permitir el uso de longitudes de baliza más largas, lo que reduce las tasas de falsos positivos y reduce la cantidad de filtrado posterior al descifrado necesario.
-
Tipos de balizas
El tipo de baliza que configure determinará el tipo de consultas que podrá realizar. Existen dos tipos de balizas que admiten el cifrado para búsquedas. Las balizas estándar realizan búsquedas de igualdad. Las balizas compuestas combinan cadenas literales de texto no cifrado y balizas estándar para realizar operaciones complejas de bases de datos.
Balizas estándar
Las balizas estándar son la forma más sencilla de implementar el cifrado para búsquedas en su base de datos. Solo pueden realizar búsquedas de igualdad para un único campo virtual o cifrado. Para obtener información sobre cómo configurar balizas estándar, consulte Configuración de balizas estándar. También puede utilizar particiones con balizas para promover la aleatoriedad cuando los datos subyacentes tengan una distribución irregular.
Los siguientes son conceptos importantes para las balizas estándar.
- Fuente de baliza
-
El campo a partir del cual se construye una baliza estándar se denomina la fuente de baliza. Identifica la ubicación de los datos que la baliza necesita mapear. La fuente de la baliza puede ser un campo cifrado o un campo virtual. La fuente de baliza de cada baliza estándar debe ser única. No puede configurar dos balizas con la misma fuente de baliza.
Las balizas estándar se pueden utilizar para realizar búsquedas de igualdad en un campo cifrado o virtual. O bien, se pueden usar para construir balizas compuestas para realizar operaciones de bases de datos más complejas. Para ayudarlo a organizar y administrar las balizas estándar, el SDK de cifrado de AWS bases de datos proporciona los siguientes estilos de balizas opcionales que definen el uso previsto de una baliza estándar. Para obtener más información, consulte Definición de estilos de baliza.
Puede crear una baliza estándar que realice búsquedas de igualdad para un único campo cifrado, o puede crear una baliza estándar que realice búsquedas de igualdad en la concatenación de varios
SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXTcampos yENCRYPT_AND_SIGNSIGN_ONLY, creando un campo virtual.
- Campos virtuales
-
Un campo virtual es un campo conceptual creado a partir de uno o más campos de origen. Al crear un campo virtual no se graba un campo nuevo en el registro. El campo virtual no se almacena de forma explícita en la base de datos. Se utiliza en la configuración de baliza estándar para dar instrucciones a la baliza sobre cómo identificar un segmento específico de un campo o concatenar varios campos de un registro para realizar una consulta específica. Un campo virtual requiere al menos un campo cifrado.
nota
El siguiente ejemplo muestra los tipos de transformaciones y consultas que se pueden realizar con un campo virtual. En la aplicación, es posible que los campos de ejemplo utilizados en este ejemplo no cumplan con las recomendaciones de unicidad de distribución y correlación para las balizas.
Por ejemplo, si desea realizar búsquedas de igualdad en la concatenación de los campos
FirstNameyLastName, puede crear uno de los siguientes campos virtuales.-
Un campo virtual
NameTag, construido a partir de la primera letra del campoFirstName, seguida del campoLastName, todo en minúsculas. Este campo virtual le permite realizar consultasNameTag=mjones. -
Un campo virtual
LastFirst, que se construye a partir del campoLastName, seguido del campoFirstName. Este campo virtual le permite realizar consultasLastFirst=JonesMary.
O bien, si desea realizar búsquedas de igualdad en un segmento específico de un campo cifrado, cree un campo virtual que identifique el segmento que desea consultar.
Por ejemplo, si desea consultar un campo
IPAddresscifrado con los tres primeros segmentos de la dirección IP, cree el siguiente campo virtual.-
Un campo virtual
IPSegment, construido a partir deSegments(‘.’, 0, 3). Este campo virtual le permite realizar consultasIPSegment=192.0.2. La consulta devuelve todos los registros con un valorIPAddressque comienza por “192.0.2”.
Los campos virtuales deben ser únicos. No se pueden construir dos campos virtuales a partir exactamente de los mismos campos de origen.
Para obtener ayuda para configurar los campos virtuales y las balizas que los utilizan, consulte Creación de un campo virtual.
-
Balizas compuestas
Las balizas compuestas crean índices que mejoran el rendimiento de las consultas y permiten realizar operaciones de base de datos más complejas. Puede utilizar balizas compuestas para combinar cadenas literales de texto no cifrado y balizas estándar para realizar consultas complejas en registros cifrados, como consultar dos tipos de registros diferentes desde un único índice o consultar una combinación de campos con una clave de clasificación. Para ver más ejemplos de soluciones de baliza compuesta, consulte Elegir un tipo de baliza.
Las balizas compuestas se pueden construir a partir de balizas estándar o de una combinación de balizas estándar y campos señalizados. Se construyen a partir de una lista de piezas. Todas las balizas compuestas deben incluir una lista de partes cifradas que identifique los ENCRYPT_AND_SIGN campos incluidos en la baliza. Cada ENCRYPT_AND_SIGN campo debe identificarse mediante una baliza estándar. Las balizas compuestas más complejas también pueden incluir una lista de partes firmadas que identifique el texto sin formato SIGN_ONLY o SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT los campos incluidos en la baliza, y una lista de partes constructivas que identifique todas las formas posibles en que la baliza compuesta puede ensamblar los campos.
nota
El SDK AWS de cifrado de bases de datos también admite balizas firmadas que se pueden configurar completamente a partir de texto sin formato SIGN_ONLY y campos. SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT Las balizas firmadas son un tipo de baliza compuesta que indexan y realizan consultas complejas en campos firmados, pero no cifrados. Para obtener más información, consulte Crear balizas firmadas.
Para obtener ayuda para configurar balizas compuestas, consulte Configuración de balizas compuestas.
La forma en que configure su baliza compuesta determina los tipos de consultas que puede realizar. Por ejemplo, puede hacer que algunas partes cifradas y firmadas sean opcionales para permitir una mayor flexibilidad en sus consultas. Para obtener más información sobre los tipos de consultas que pueden realizar las balizas compuestas, consulte Balizas de consulta.