View a markdown version of this page

Escolhendo um comprimento de farol e partições - AWS SDK de criptografia de banco de dados

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Escolhendo um comprimento de farol e partições

Nossa biblioteca de criptografia do lado do cliente foi renomeada para SDK de criptografia de AWS banco de dados. Este guia do desenvolvedor ainda fornece informações sobre o DynamoDB Encryption Client.

Quando você grava um novo valor em um campo criptografado configurado para criptografia pesquisável, o SDK de criptografia de AWS banco de dados calcula um HMAC sobre o valor de texto simples combinado com um identificador de partição. Em uma determinada partição, o HMAC completo representa de forma exclusiva o valor do texto sem formatação. Em seguida, o SDK trunca a saída HMAC para que vários valores de texto simples distintos possam ser mapeados para o mesmo beacon. Essas colisões, também conhecidas como falsos positivos, limitam a capacidade de um usuário não autorizado de inferir informações distintas sobre o texto simples subjacente.

O número médio de falsos positivos gerados para cada farol é determinado pelo comprimento do farol restante após o truncamento e pelo número de partições em uso. Você só precisa definir o comprimento do beacon ao configurar os beacons padrão. Os beacons compostos usam os comprimentos dos beacons padrão a partir dos quais são construídos. Ao distribuir valores em várias partições, as colisões são mantidas dentro de cada partição, o que ajuda a reduzir a concentração de frequência enquanto preserva o comportamento correto da consulta.

O beacon não altera o estado criptografado do campo. No entanto, quando você usa beacons, há uma compensação inerente entre a eficiência de suas consultas e a quantidade de informações reveladas sobre a distribuição dos dados. Comprimentos de farol mais curtos e partições adicionais aumentam as colisões e reduzem o vazamento de frequência, enquanto comprimentos de farol mais longos e menos partições melhoram a precisão da consulta.

O objetivo da criptografia pesquisável é reduzir os custos de desempenho associados aos bancos de dados criptografados do lado do cliente usando beacons para realizar consultas em dados criptografados. Os beacons são armazenados junto com os campos criptografados a partir dos quais são calculados. Isso significa que eles podem revelar informações diferenciadas sobre a distribuição do seu conjunto de dados. Em casos extremos, um usuário não autorizado pode analisar as informações reveladas sobre sua distribuição e usá-las para identificar o valor em texto simples de um campo. Escolher comprimentos de beacon e contagens de partições adequados ajuda a mitigar esses riscos e preservar a confidencialidade de seus dados.

Analise seu modelo de ameaça para determinar o nível de segurança de que você precisa. Por exemplo, quanto mais pessoas tiverem acesso ao seu banco de dados, mas não devem ter acesso aos dados em texto simples, mais você pode querer proteger a confidencialidade da distribuição do conjunto de dados. O aumento da confidencialidade normalmente exige a geração de mais falsos positivos — por meio de beacons mais curtos, partições adicionais ou ambos — o que, por sua vez, pode reduzir o desempenho da consulta.

Escolhendo um esquema de particionamento

O esquema de particionamento determina como os itens são distribuídos entre as partições quando os beacons são derivados. A escolha de um esquema adequado é importante para equilibrar privacidade, desempenho e previsibilidade operacional.

Ao selecionar um esquema de particionamento, considere os seguintes objetivos:

  • Distribua valores de alta frequência para reduzir grandes classes de equivalência de faróis.

  • Evite introduzir padrões previsíveis que possam vazar informações confidenciais.

  • Mantenha um comportamento estável em todas as gravações e consultas.

Distribuição aleatória padrão

O padrão recomendado é um esquema de distribuição aleatória. Nesse modelo, cada item é atribuído a uma partição usando um valor aleatório criptograficamente seguro. A distribuição aleatória produz tamanhos de partição aproximadamente iguais ao longo do tempo e garante que os valores frequentes sejam distribuídos uniformemente.

Use distribuição aleatória quando:

  • Você não tem um forte conhecimento de domínio sobre distribuições de valor.

  • O conjunto de dados contém distorções desconhecidas ou em evolução.

  • Você deseja minimizar o vazamento dependente do atributo.

Distribuição determinística

Em alguns casos, a atribuição de partições deve ser determinística. Um esquema determinístico atribui partições com base em uma função estável dos atributos do item. Esses esquemas devem ser projetados com cuidado, pois entradas distorcidas ou sensíveis podem resultar em particionamento desigual ou vazamento não intencional de informações.

Use a distribuição determinística quando:

  • Os fluxos de trabalho operacionais dependem do posicionamento consistente das partições.

  • Você tem um conjunto de valores exclusivos que são agrupados intencionalmente em uma única partição.

Manipulação de valores ativos conhecidos

Se seu conjunto de dados contiver valores ativos conhecidos, você poderá combinar estratégias aleatórias e determinísticas. Por exemplo, você pode distribuir aleatoriamente um pequeno conjunto de valores de alta frequência enquanto atribui todos os outros valores de forma determinística.

Essa abordagem reduz a concentração de valores quentes e, ao mesmo tempo, preserva o comportamento previsível para o restante do conjunto de dados. Como ele introduz complexidade adicional, revise-o cuidadosamente para evitar o vazamento não intencional de informações.

Exemplos de esquemas de particionamento

Os exemplos a seguir ilustram esquemas comuns de particionamento e mostram como diferentes características de dados influenciam a atribuição de partições. Cada exemplo demonstra como equilibrar privacidade, desempenho e simplicidade operacional.

Exemplo 1: dados distribuídos uniformemente

Você está criando um farol para números de telefone, e os valores em seu conjunto de dados são distribuídos aproximadamente uniformemente. Nenhum número de telefone aparece com muito mais frequência do que outros.

Nesse caso, a configuração de uma única partição é suficiente. Partições adicionais oferecem poucos benefícios e só aumentariam a difusão das consultas.

Exemplo 2: resultados binários com frequência distorcida

Você tem um banco de dados que armazena resultados de exames médicos com dois valores possíveis: NEGATIVO e POSITIVO. Os resultados NEGATIVOS ocorrem aproximadamente cinco vezes mais do que os resultados POSITIVOS.

Para reduzir o vazamento de frequência, use uma estratégia mista:

  • Atribua resultados NEGATIVOS aleatoriamente em cinco partições.

  • Atribua resultados POSITIVOS de forma determinística a uma única partição.

Essa abordagem distribui o valor sobre-representado enquanto mantém estável o valor mais raro, reduzindo as grandes classes de equivalência sem perdas desnecessárias.

Exemplo 3: Valores ativos conhecidos em um domínio grande

Você tem um banco de dados de nomes próprios nos Estados Unidos da América. Um conjunto relativamente pequeno de nomes comuns (por exemplo, os 500 nomes mais frequentes) aparece com muito mais frequência do que o resto.

  • Atribua aleatoriamente os 500 nomes mais frequentes em quatro partições.

  • Atribua todos os nomes restantes de forma determinística a uma única partição.

  • Aumente gradualmente o número de partições até que os dados atribuídos a cada partição exibam uma distribuição aproximadamente uniforme.

Essa abordagem híbrida visa valores ativos conhecidos, mantendo o particionamento simples e previsível para a maioria dos nomes.

Esses exemplos mostram como os esquemas de particionamento podem ser adaptados às diferentes características dos dados. Na maioria dos casos, a distribuição aleatória é suficiente, mas a incorporação do conhecimento do domínio pode melhorar ainda mais a privacidade e o desempenho quando aplicada com cuidado.

Cálculo do tamanho do beacon

O comprimento do farol é especificado em bits e determina quantos bits da saída HMAC são retidos após o truncamento. O tamanho recomendado depende de como os valores são distribuídos em cada partição, se os dados contêm valores correlacionados e de seus requisitos de segurança e desempenho. Quando um conjunto de dados é aproximadamente uniforme após a aplicação de um esquema de particionamento apropriado, você pode usar equações simples e procedimentos de ajuste para estimar o comprimento efetivo do farol. Essas equações fornecem uma estimativa do número médio de falsos positivos que um farol pode produzir, mas não garantem um número específico de falsos positivos para cada valor exclusivo no conjunto de dados. O primeiro passo é estimar a população.

nota

A eficácia dessas equações depende da distribuição do seu conjunto de dados em cada partição. Se seu conjunto de dados não estiver distribuído uniformemente, consulte. Os beacons são adequados para meu conjunto de dados?

Estimar a população

A população é o número esperado de valores exclusivos no campo a partir do qual seu beacon padrão é construído, não é o número total esperado de valores armazenados no campo. Por exemplo, considere um Room campo criptografado que identifica o local das reuniões dos funcionários. Espera-se que o Room campo armazene 100.000 valores totais, mas existem apenas 50 salas diferentes que os funcionários podem reservar para reuniões. Isso significa que a população é 50 porque há apenas 50 valores exclusivos possíveis que podem ser armazenados no Room campo.

nota

Se seu beacon padrão for construído a partir de um campo virtual, a população usada para calcular o comprimento do beacon é o número de combinações exclusivas criadas pelo campo virtual.

Ao estimar sua população, não se esqueça de considerar o crescimento projetado do conjunto de dados. Depois de gravar novos registros com o beacon, não será possível atualizar o comprimento do beacon. Analise seu modelo de ameaças e todas as soluções de banco de dados existentes para criar uma estimativa do número de valores exclusivos que você espera que esse campo armazene nos próximos cinco anos.

A sua população não precisa ser precisa. Primeiro, identifique o número de valores exclusivos em seu banco de dados atual ou estime o número de valores exclusivos que você espera armazenar no primeiro ano. Em seguida, use as perguntas a seguir para ajudá-lo a determinar o crescimento projetado de valores exclusivos nos próximos cinco anos.

  • Você espera que os valores exclusivos se multipliquem por 10?

  • Você espera que os valores exclusivos se multipliquem por 100?

  • Você espera que os valores exclusivos se multipliquem por 1000?

A diferença entre 50.000 e 60.000 valores exclusivos não é significativa e ambos resultarão no mesmo comprimento de beacon recomendado. No entanto, a diferença entre 50.000 e 500.000 valores exclusivos afetará significativamente o comprimento recomendado do beacon.

Considere analisar os dados públicos com base na frequência de tipos de dados comuns, como códigos postais ou sobrenomes. Por exemplo, existem 41.707 CEPs nos Estados Unidos. A população que você usa deve ser proporcional ao seu próprio banco de dados. Se o ZIPCode campo em seu banco de dados incluir dados de todos os Estados Unidos, você poderá definir sua população como 41.707, mesmo que o ZIPCode campo não tenha atualmente 41.707 valores exclusivos. Se o ZIPCode campo em seu banco de dados incluir apenas dados de um único estado e sempre incluirá dados de um único estado, você poderá definir sua população como o número total de CEPs nesse estado, em vez de 41.704.

Calculando o comprimento do farol a partir do tamanho da população

Quando seus dados estão distribuídos de forma aproximadamente uniforme em cada partição e não contêm valores correlacionados, você pode estimar um comprimento de farol apropriado usando uma fórmula simples baseada na população.

Seja p o tamanho da população do farol, ou seja, o número de valores de texto simples distintos a partir dos quais o farol é construído em uma única partição. Um ponto de partida comum para o comprimento do farol b (em bits) é:

b = log₂(p) − 1

Essa fórmula preserva uma probabilidade não desprezível de colisões, mantendo o número de falsos positivos gerenciável. Subtrair um bit do logaritmo garante que vários valores distintos sejam mapeados para o mesmo farol, o que ajuda a limitar o vazamento de frequência e suporta o anonimato.

Esse cálculo fornece uma estimativa do comportamento médio da colisão em todo o conjunto de dados. Não garante que cada valor produza o mesmo número de falsos positivos, nem leva em conta distribuições distorcidas, valores correlacionados ou padrões de dados adversários.

Use essa fórmula como uma diretriz inicial em vez de um requisito estrito. Sempre valide a configuração resultante em relação ao seu modelo de ameaça, expectativas de desempenho e características de dados observadas e ajuste o comprimento do farol ou o número de partições conforme necessário.

Tópico avançado sobre o comprimento do farol

Como usuário avançado, você tem maior flexibilidade ao selecionar um comprimento de farol apropriado para sua solução. Você deve escolher um tamanho que proteja adequadamente a confidencialidade de seus dados e, ao mesmo tempo, minimize qualquer impacto desnecessário no desempenho da consulta. A quantidade de segurança preservada por um beacon depende da distribuição do seu conjunto de dados e da correlação dos campos a partir dos quais seus beacons são construídos.

  • Um comprimento de beacon muito longo produz poucos falsos positivos e pode revelar informações diferenciadas sobre a distribuição do seu conjunto de dados.

  • Um comprimento de farol muito curto produz muitos falsos positivos e aumenta o custo de desempenho das consultas, pois exige uma varredura mais ampla do banco de dados.

Se seu conjunto de dados estiver distribuído aproximadamente uniformemente, você poderá usar as equações e procedimentos a seguir para ajudar a estimar um comprimento de farol apropriado para sua implementação. Essas equações fornecem uma estimativa do número médio de falsos positivos que um farol pode produzir, mas não garantem um número específico de falsos positivos para cada valor exclusivo no conjunto de dados. Os tópicos a seguir pressupõem que seus beacons estejam distribuídos uniformemente e não contenham dados correlacionados.

  1. Calcule a faixa recomendada para o número esperado de colisões

    Para determinar o comprimento adequado do beacon para um determinado campo, você deve primeiro identificar um intervalo apropriado para o número esperado de colisões. O número esperado de colisões representa o número médio esperado de valores de texto simples exclusivos que são mapeados para uma tag HMAC específica. O número esperado de falsos positivos para um valor de texto simples exclusivo é um a menos do que o número esperado de colisões.

    Recomendamos que o número esperado de colisões seja maior ou igual a dois e menor que a raiz quadrada da sua população. As equações a seguir só funcionam se sua população tiver 16 ou mais valores exclusivos.

    2 ≤ number of collisions < √(Population)

    Se o número de colisões for menor que dois, o beacon produzirá poucos falsos positivos. Recomendamos dois como o número mínimo de colisões esperadas, pois isso significa que, em média, cada valor exclusivo no campo gerará pelo menos um falso positivo ao ser mapeado para outro valor exclusivo.

  2. Calcule o intervalo recomendado para comprimentos de beacon

    Depois de identificar o número mínimo e máximo de colisões esperadas, use a equação a seguir para identificar uma faixa de comprimentos de beacon apropriados.

    number of collisions = Population * 2-(beacon length)

    Primeiro, resolva o comprimento do beacon em que o número de colisões esperadas é igual a dois (o número mínimo recomendado de colisões esperadas).

    2 = Population * 2-(beacon length)

    Em seguida, calcule o comprimento do beacon em que o número esperado de colisões é igual à raiz quadrada da sua população (o número máximo recomendado de colisões esperadas).

    √(Population) = Population * 2-(beacon length)

    Recomendamos arredondar a saída produzida por essa equação para o menor comprimento do beacon. Por exemplo, se a equação produzir um comprimento de beacon de 15,6, recomendamos arredondar esse valor para 15 bits em vez de arredondar para 16 bits.

  3. Escolher um comprimento de beacon

    Essas equações identificam apenas uma faixa recomendada de comprimentos de beacon para seu campo. Recomendamos usar um comprimento de beacon menor para preservar a segurança do seu conjunto de dados sempre que possível. No entanto, o comprimento do beacon que você realmente usa é determinado pelo seu modelo de ameaça. Considere seus requisitos de desempenho ao analisar seu modelo de ameaça para determinar o melhor comprimento do beacon para seu campo.

    Usar um comprimento de beacon menor reduz o desempenho da consulta, enquanto usar um comprimento de beacon maior diminui a segurança. Em geral, se seu conjunto de dados estiver distribuído de forma desigual ou se você construir beacons distintos a partir de campos correlacionados, precisará usar beacons menores para minimizar a quantidade de informações reveladas sobre a distribuição de seus conjuntos de dados.

    Se você analisar seu modelo de ameaça e decidir que qualquer informação distintiva revelada sobre a distribuição de um campo não representa uma ameaça à sua segurança geral, você pode optar por usar um comprimento de beacon maior do que o intervalo recomendado calculado. Por exemplo, se você calculou o intervalo recomendado de comprimentos de beacon para um campo como 9 a 16 bits, você pode optar por usar um comprimento de beacon de 24 bits para evitar qualquer perda de desempenho.

    Escolha o comprimento do beacon com cuidado. Depois de gravar novos registros com o beacon, não será possível atualizar o comprimento do beacon.

Exemplo avançado de comprimento de farol

Considere um banco de dados que marcou o unit campo como ENCRYPT_AND_SIGN nas ações criptográficas. Para configurar um beacon padrão para o campo unit, precisamos determinar o número esperado de falsos positivos e o comprimento do beacon para o campo unit.

  1. Estimar a população

    Depois de analisar nosso modelo de ameaças e a solução atual de banco de dados, esperamos que o campo unit eventualmente tenha 100.000 valores exclusivos.

    Isso significa que População = 100.000.

  2. Calcule a faixa recomendada para o número esperado de colisões.

    Neste exemplo, o número esperado de colisões deve estar entre 2 e 316.

    2 ≤ number of collisions < √(Population)
    1. 2 ≤ number of collisions < √(100,000)
    2. 2 ≤ number of collisions < 316
  3. Calcule o intervalo recomendado para o comprimento do beacon.

    Neste exemplo, o comprimento do beacon deve estar entre 9 e 16 bits.

    number of collisions = Population * 2-(beacon length)
    1. Calcule o comprimento do beacon em que o número esperado de colisões é igual ao mínimo identificado na Etapa 2.

      2 = 100,000 * 2-(beacon length)

      Comprimento do beacon = 15,6 ou 15 bits

    2. Calcule o comprimento do beacon em que o número esperado de colisões é igual ao máximo identificado na Etapa 2.

      316 = 100,000 * 2-(beacon length)

      Comprimento do beacon = 8,3 ou 8 bits

  4. Determine o comprimento do beacon adequado aos seus requisitos de segurança e desempenho.

    Para cada bit abaixo de 15, o custo de desempenho e a segurança dobram.

    • 16 bits

      • Em média, cada valor exclusivo será mapeado para 1,5 outras unidades.

      • Segurança: dois registros com a mesma tag HMAC truncada têm 66% de probabilidade de ter o mesmo valor em texto simples.

      • Desempenho: uma consulta recuperará 15 registros para cada 10 registros que você realmente solicitou.

    • 14 bits

      • Em média, cada valor exclusivo será mapeado para 6,1 outras unidades.

      • Segurança: dois registros com a mesma tag HMAC truncada têm 33% de probabilidade de ter o mesmo valor em texto simples.

      • Desempenho: uma consulta recuperará 30 registros para cada 10 registros que você realmente solicitou.