web-dev-qa-db-fra.com

Comprendre les numéros de série principaux (KSN) dans une clé unique dérivée par transaction (DUKPT)

J'ai un certain nombre de questions concernant les numéros de série clé (KSNS) dans DUKPT :

  1. Les KSN sont de 8 à 10 octets longs. La mise en œuvre plus ancienne est de 8 octets alors que les plus récents sont 10 octets. Est-ce que je risques d'être incompatible avec un ancien système si je crée 10 octets longs KSNS?
  2. Les KSN ont 3 composants: un compteur de transactions de 21 bits et des bits restants sont destinés à l'ID de clé de clé et au module de sécurité résistant aux sapeurs (TRSM). Pour un KSN de 8 octets, la convention typique est de 24 bits pour un identifiant de clés et 19 bits pour l'ID TRSM. Cela signifie environ 16 millions de clés de dérivation de base (BDKS) et 500K appareils. Pour moi, cette allocation a des avantages et des inconvénients. Les inconvénients sont que je n'aurai jamais 16 millions de BDK et si l'entreprise réussit, il est tout à fait possible d'avoir> 500K appareils. L'avantage est que cela nous oblige à ne pas utiliser le même BDK sur plus de 500 000 périphériques qui limite l'exposition d'un BDK étant compromis. Je lis qu'il existe une flexibilité dans combien de bits sont alloués à la clé de clé ID VS TRSM ID. Donc, je suis tenté d'échanger l'allocation de telle sorte que nous puissions avoir jusqu'à 500k BDKS et 16M appareils. Mais je vois aussi de nombreuses implémentations open source de Dukpt qui assument des bits de 24-19-21 bits. Ces mises en œuvre vont tous casser si je ne suivrait pas la convention. Recommanderiez-vous que je viens de rester à la convention?
  3. Existe-t-il une manière standard pour définir les identifiants de clé de clé ou chaque entité possédant une BDK propose-t-elle sa propre convention? Puis-je attribuer un jeu de clé ID = 1 à mon tout premier BDK toujours, puis l'incrémentez-le par 1 pour chaque nouveau BDK? Ou cette stratégie est-elle trop naïve?
  4. Existe-t-il une manière standante pour définir l'identifiant TRSM? Puis-je affecter TRSM ID = 1 pour le tout premier périphérique injecté à l'aide d'un nouveau BDK, puis incrémentez-le par 1 pour chaque nouveau BDK?
3
Fayez
  1. 8/10 octets. La norme a toujours eu KSN 10 octets (80 bits), mais autorisait des valeurs plus petites rembourrées à gauche avec 0xFF et de nombreuses personnes ont fait ou utilisent 8 octets. Je ne suis pas en mesure de dire qu'il y a un modèle clair de toute façon. Si l'un des périphériques (ou des systèmes) que vous prévoyez traiter est limité à 8 octets, alors oui, utilisez 8 octets. Comme ci-dessous, c'est fondamentalement arbitraire maintenant de toute façon.

  2. Vous avez raison, tout le monde semble utiliser xx-19-21 bits qui pendant 8 octets est de 24-19-21 bits. Rappelez-vous que Dukpt a été conçu à l'origine pour les guichets automatiques qui coûte plusieurs milliers de dollars, de sorte que 512k n'étaient pas une limite gênante; Maintenant, les gens l'utilisent pour des barres d'allumettes. Techniquement, seule la partie complets (XX-21) concerne le cryptage afin que vous puissiez déplacer les autres limites (IES?) Si vos programmes, API, partenaires, etc. peuvent le gérer. OTOH Si vous vous en tenez à la convention, ce qui est plus facile, rien n'indique que différents KSI doivent toujours mapper différents BDKS. Vous pouvez avoir [FFFF]ABAB00-mmmmm est les premiers appareils 512K pour BDK A , ABAB01-mmmmm est le second 512K, etc., ABAB50 est le premier lot pour bdk B , etc. tant que vous n'avez besoin que de gérer des dizaines ou peut-être une centaine de lots (plus de 50 millions de périphériques). c'est bien. Si vous aviez besoin de plus de plus de 500 millions de plus de plus de 500 millions, je m'en avais, mais à ce moment-là, vous auriez à ce moment-là que vous auriez assez de clouter pour changer cela.

  3. À l'origine, l'idée était celle-ci [~ # ~ # ~] ksi [~ # ~] Identifierait la banque ou la sous-partie d'une banque (guichets automatiques, rappelez-vous) et être globalement unique afin de tout cryptogramme dans le réseau de compensation -Identifier/vérifier qui il "appartient à". De nos jours, Ksi est fondamentalement devenu arbitraire, alors oui choisissez ce que vous aimez. Sauf que je suggère d'utiliser une valeur qui a des zéros de premier plan; Trop de choses ont tendance à penser à des zéros de premier plan sur une valeur (même hex-hex-hex) ne sont pas significatives et de les déposer.

  4. TRSM ID (ou ID de périphérique): Oui, utilisez simplement des numéros séquentiels. Mais méfiez-vous que vous êtes souvent montré les 21-19 bits affichés dans Hex comme -00000-ttttt et-00001-ttttt sont l'appareil 0, -00002-ttttt plus sont le dispositif 1, ... -FFFFE-ttttt plus sont le périphérique 0x7ffff.

4
dave_thompson_085