Pergunta

Alguém tem experiência prática ou uma referência para um esquema que implemente um esquema de gestão de chaves que esteja em conformidade com o PCI-DSS padrão de segurança?

Obviamente, existem algumas implementações disponíveis, dado o número de empresas compatíveis com PCI DSS, mas tentar encontrar detalhes sobre elas é difícil.Quando se trata de armazenar dados privados, a discussão normalmente termina em qual algoritmo de criptografia usar.Depois disso, normalmente há uma declaração sobre o armazenamento adequado da chave privada, mas nenhuma discussão sobre maneiras práticas de fazer isso ou coisas como alterar periodicamente a chave ou fornecer a chave para aplicativos, etc.

Especificamente, estou interessado nos requisitos das seções 3.5 e 3.6 do padrão PCI DSS.

3.5.2 Armazene chaves criptográficas de forma segura no menor número possível de locais e formatos.

3.6.a Verifique a existência de procedimentos de gerenciamento de chaves utilizadas para criptografia de dados do titular do cartão.Observação:Vários padrões do setor para gerenciamento de chaves estão disponíveis em vários recursos, incluindo o NIST, que pode ser encontrado em http://csrc.nist.gov.

3.6.4 Verifique se os procedimentos de gerenciamento de chaves são implementados para exigir mudanças periódicas nas chaves, pelo menos uma vez por ano.

Eu dei uma olhada no Publicações criptográficas do NIST como sugere o documento de requisitos do PCI DSS, mas além das notas recentes de um Workshop de gerenciamento de chaves criptográficas não parece haver muitos esquemas ou padrões realmente implementáveis.

Quanto ao que estou tentando fazer, não é:

  1. Armazene senhas + sais como hashes unidirecionais para autenticação,
  2. Escolha um algoritmo simétrico forte para criptografia de dados,
  3. Evite a necessidade de armazenar dados privados em primeiro lugar.
  4. Evite a necessidade de gerenciamento de chaves com outros mecanismos:segurança física, segurança de banco de dados, dragões e magos etc.

Todas essas são preocupações válidas, mas neste caso não são a resposta.Os detalhes básicos dos meus requisitos estão em uma pergunta SO diferente Padrão de design .Net para armazenar e recuperar dados confidenciais por usuário mas tudo se resume ao gerenciamento de chaves, daí esta questão mais refinada.

Foi útil?

Solução

Estou familiarizado com a dor que você está passando.Lutamos para atualizar um antigo sistema EFT para conformidade com PCI.O gerenciamento de chaves foi certamente (do meu ponto de vista de software) a parte mais desafiadora.

Acho que também tropecei no Recomendações do NIST para gerenciamento de chaves que Martin postou e ficou extremamente frustrado com a falta de exemplos concretos.

ANSI X9.17 - Gerenciamento de chaves de instituições financeiras é provavelmente o mais relevante para as suas necessidades, com PCI-DSS.Boa sorte ao lê-lo, porém, o documento é uma enorme coleção de TLAs que eu sei que certamente tive dificuldade para ler.(X9.17 é atualizado anualmente e a versão mais recente é agora: NIST SP 800-57 Pt.1 Rev.4 )

Quando a frustração se transformou em desespero eu tropecei A fábrica de dinheiro eletrônico que é um conto ficcional, com um bom número de referências técnicas relevantes. Capítulo 17 discute X9.17 e pode ajudar no entendimento.

A partir de todo esse material de referência, projetei um sistema de gerenciamento de chaves que deixou nosso auditor satisfeito.Os documentos de design são bastante extensos, mas, em resumo, a ideia é que você tenha sua chave de criptografia de dados protegida por uma chave de criptografia de chave, e a chave de criptografia de chave seja armazenada em uma caixa fisicamente separada, protegida por uma chave mestra.

Minha implementação foi ter um aplicativo Key Server rodando em uma caixa do Windows.Este aplicativo exigia a entrada de duas 'chaves mestras do servidor de chaves' separadas antes de poder ser usado.Essas chaves seriam conhecidas apenas pelos administradores do servidor de chaves.Essas chaves são agrupadas para gerar a Chave Mestra, que é armazenada apenas na memória protegida enquanto o aplicativo está em execução.O aplicativo pode então gerar automaticamente chaves de criptografia criptograficamente fortes, que são armazenadas em formato criptografado usando a chave mestra.

Os aplicativos que precisam de criptografia solicitarão uma chave de criptografia do Key Server.A KEK é usada pelo aplicativo para criptografar/descriptografar a chave de criptografia de dados, que pode ser armazenada de forma segura com os dados do aplicativo.

Boa sorte.Espero que você também ache um desafio interessante!

Outras dicas

Você já viu o NIST SP 800-57, Recomendação para gerenciamento de chaves?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top