2017-05-20 2 views
1

En supposant qu'il ya une clé de chiffrement à clé qui est en mémoire et non écrit dans le fichier ou base de données ...Sécurité des clés - Comment s'assurer que les clés sont sécurisées?

byte[] kek = new byte[32]; 
secureRandom.nextBytes(kek); 
byte[] kekHash = SHA512.hash(kek); 

et en supposant que les clés de chiffrement de clés sont éphémères, et les clés de chiffrement de données peut ou non être éphémère. Comment protéger kek?

Comment vous assurez-vous que kek n'est jamais écrit dans la mémoire virtuelle? Comment s'assurer que le kek n'est pas lu par une autre application (par exemple CheatEngine)?

Comment assurez-vous que le kek est généré par l'application et la kek et kekHash ne sont pas manipulés par une autre application pour faire utiliser la clé d'un adversaire?

J'ai entendu parler de "logiciel HSM". Quelles techniques utilisent-ils qui sont si hallucinantes que les clés qu'ils stockent sont sécurisées?

Répondre

1

Si vous voulez vraiment sécuriser votre clé de chiffrement, vous devez utiliser un module de sécurité matérielle (HSM). Ce sont des dispositifs physiques qui peuvent stocker vos clés en toute sécurité. Vous pouvez en savoir plus à leur sujet here.

Dans votre scénario actuel, vous générez les clés de chiffrement à l'aide du logiciel (java dans ce cas), et vous effectuez également des opérations de chiffrement (chiffrement/déchiffrement) sur le logiciel. Mais lorsque vous utilisez un HSM, vous générez et stockez vos clés sur le matériel, et vous effectuez l'opération de chiffrement sur le matériel lui-même, mais pas sur le logiciel. Et il y a beaucoup de configuration que vous devez faire pour que votre logiciel communique avec le matériel. Ce n'est donc pas si simple d'entrer dans le HSM et de voir les clés. C'est juste un niveau élevé de la façon dont vous utiliseriez un HSM. L'API PKCS # 11 est généralement utilisée pour interagir avec le matériel. Vous pouvez en savoir plus à ce sujet here.

Ces périphériques sont généralement livrés en 3 grandes usines: HSM (aussi gros que les serveurs), jeton USB, carte à puce. Ces appareils peuvent fonctionner de quelques centaines à mille dollars. Donc, pour ceux qui veulent essayer le fonctionnement du HSM ou si cela coûte cher ou simplement faire du R & D pour leur projet, vous pouvez utiliser le SoftHSM. Ce qui signifie que vous interagiriez avec le logiciel SoftHSM car vous interagiriez avec le matériel comme d'habitude (en utilisant PKCS # 11), mais vos clés sont en fait stockées sur le logiciel. Puisque SoftHSM n'est pas un périphérique physique, c'est un logiciel que vous installerez sur votre machine. Les opérations de chiffrement sont également effectuées sur le logiciel. Et à l'avenir, lorsque vous serez prêt à intégrer un HSM physique, vous pourrez simplement utiliser votre code SoftHSM. Vous pouvez vous référer à la documentation SoftHSM here.

Donc, pour vraiment stocker vos clés en toute sécurité, vous pouvez utiliser un HSM. Mais quand vous utilisez un logiciel, il y a toujours une extrémité ouverte. Disons même si vous avez une clé super-maître qui crypte vos clés de cryptage, vous devez stocker la clé super-maître quelque part. Habituellement stocké dans un KeyStore Java. Et Java KeyStore est protégé par mot de passe, et vous devez également le stocker quelque part. Une façon d'approcher un niveau de sécurité un peu plus élevé consiste à masquer votre code pour effectuer ces opérations cruciales. Même l'obfuscation peut casser, mais il prend du temps et un peu plus difficile.

+0

Bonjour, j'apprécie la réponse que vous avez donnée. J'ai de l'expérience avec les HSM mais je cherche une solution logicielle pour le moment, et peut-être un moyen époustouflant de protéger la clé de chiffrement. De plus, bien que j'apprécie votre suggestion d'obfuscation, je dois dire qu'il est assez courant d'utiliser ProGuard avec Java ou un autre obfuscateur disponible dans le commerce. Plus important encore, selon le principe de Kirchoff, il est supposé que l'adversaire a une connaissance parfaite du système, sauf la valeur des clés et la sécurité par l'obscurité/le secret des codes/système est inacceptable. – user3635998