Chiffrement de colonne cohérent SQL Server

J'ai une exigence SQL Server assez simple où j'ai une colonne de type int et je veux crypter cette colonne étant donné que la fonction qui sera utilisée pour crypter la colonne devrait générer la même valeur chaque fois qu'elle est appelée.

Le context

  1. J'ai un système avec 2 rôles user Rôle source, rôle cible
  2. Les users du rôle source génèrent des tables avec l'ID de structure suivant => int metadata columns => varchar
  3. Mon système va générer une copy de la table source avec ID obscurci
  4. Les users du rôle cible auront access à la table générée et peuvent append / mettre à jour les colonnes de métadonnées, mais ils ne doivent pas connaître l'identifiant.

Mes essais

  1. J'ai essayé ENCRYPTBYKEY avec l'authentificateur et sans authentificateur mais chaque fois que j'appelle la fonction, il génère une valeur différente qui pourrait être bénéfique dans certains scénarios mais le mien n'en fait pas partie 🙂
  2. J'ai aussi essayé d'utiliser ENCRYPTBYASYMKEY et le même comportement est apparu, ce qui est une sortie différente à chaque appel
  3. J'ai également trouvé ce post de forum qui mentionne le SQL Server utilise le vector d'initialisation random

Ma question est, quelles sont les solutions possibles pour atteindre mes exigences count tenu que la fonction sera utilisée pour crypter des tables avec des millions d'loggings.

Quelles sont les solutions possibles pour atteindre mes exigences

Il n'y en a pas.

TLDR;

Le encryption moderne doit satisfaire plusieurs propriétés, une de chaque est la security sémantique . La security sémantique en termes simples signifie que si vous avez des messages cryptés, vous ne pouvez pas get d'informations supplémentaires sur le message en text brut. Vos exigences, cependant, contredisent directement cela, car en ayant access à suffisamment de messages chiffrés, on peut dériver la signification du text brut. C'est ainsi que la machine allemande Enigma a été piratée lors de la 2 ème guerre mondiale (ils ont réutilisé la key, alors que vous voulez la réparer, le résultat est le même – le text brut peut être révélé).

Pour ce faire, les vectors d'initialisation ont été inventés et doivent être utilisés.

Que feras-tu? Eh bien, il y a deux options vraiment:

  • Clarifiez vos exigences
  • Utilisez une carte qui n'implique pas la security sémantique, par exemple (1 -> 9478, 2 -> 9572, etc.). Cette option est utile si vous essayez simplement d'obscurcir des choses comme des pièces d'identité, par exemple vous ne voulez pas que le nombre de produits vendus par une entreprise soit évident.

Vous devrez écrire votre propre fonctionnalité de chiffrement pour ce faire, pourquoi voudriez-vous le faire, imo pourrait être un risque de security