11
votes

Entier symétrique au cryptage Integer

J'ai besoin de quelques pointeurs ou d'un exemple pratique sur la façon de chiffrer un INT à un autre Int et une clé secrète serait nécessaire pour déchiffrer la valeur.

Quelque chose comme: p>

encrypt(1, "secret key") == 67123571122
decrypt(67123571122, "secret key") == 1


3 commentaires

Pourquoi fais-tu ça? Quel est l'objectif? Il est très dangereux de créer votre propre cryptographie. Même des choses simples trompeuses comme "il suffit d'utiliser Cipher X" peuvent avoir des ramifications de sécurité inattendues.


Bon point. J'ai mis à jour la question


Enregistrement de la conservation de format


5 Réponses :


0
votes

Vous voulez crypter juste un seul numéro de bit Q 32/64?
Ensuite, le moyen le plus simple est de simplement xor avec une clé secrète de 32/64 bits.


11 commentaires

Alternativement, Xor avec une clé plus petite, répétée sur la portée du nombre.


Soyez prudent avec Droit Xor car alors avec seulement 64 exemples, il y a une chance que l'utilisateur puisse comprendre la clé.


Notez également que cela le rend trivial pour obtenir la clé si vous n'avez qu'une seule paire cryptée / déchiffrée.


@Mike: XOR avec la même longueur Touche secrète est la définition de OTP. Bien sûr, vous ne voulez pas réutiliser la clé.


@Knitti: Étant donné que l'affiche a mentionné "crypto" et "n00b", vous voudrez peut-être expliquer OTP ... je suppose que vous voulez dire "pavé unique".


Droite, OTP = pad une fois, et comme @Spike mentionné: Ne roule pas votre propre crypto , il y a beaucoup plus de choses à faire de mal que de bonnes bibliothèques libres (et il y en a )


Merci gars, j'ai mis à jour la question. Peut-être que tu peux me conduire dans une meilleure direction maintenant


Un OTP est totalement inutile à cette situation.


NE FAITES PAS CELA. Si quelqu'un obtient quelques exemples, ils peuvent trouver directement la clé.


@Daniel - Quelle partie de "une fois" ne comprenez-vous pas?


@MartinBeckett a lu son cas d'utilisation: il veut crypter un tas d'identifiants. Nick Johnson dit la même chose.



4
votes

Cela dépend de la sécurité cryptographique que vous voulez être. Pour pas-très sécurisé (au sens crypto - probablement bien pour une utilisation quotidienne si vous ne vous attendez pas vraiment à une attaque sérieuse), Xor avec une clé secrète fixe fonctionnera. Sachez simplement qu'il sera vulnérable à une cryptanalyse assez basique.

Si vous voulez un vrai cryptage, vous devrez probablement utiliser un chiffrement de flux comme RC4. Vous pouvez saisir 32 bits de Keystream et Xor avec votre valeur pour le crypter. Tant que vous obtenez un nouveau 32 bits de Keystream pour chaque valeur, tout ira bien.

RC4 a des mises en garde, cependant, y lisez d'abord.

Les chiffres de blocs ne seront pas votre ami dans ce cas car ils ont tous des blocages de blocs de 64 bits ou plus. Cela signifie que vous devez renvoyer votre entier 32 bits à 64 bits et vous obtiendrez 64 bits de retour ... mais vous ne pouvez pas choisir les 32 à garder. Vous ne pourrez pas le déchiffrer avec seulement la moitié des bits. Si vous êtes heureux de passer aux longs, vous pouvez utiliser 3DES ou Blowfish.

Tout dépend de ce que vous cryptez et pourquoi, il est donc difficile de donner une réponse définitive. J'espère que cela donne une idée de l'endroit où commencer, au moins.


1 commentaires

+1 pour un chiffre de bloc de 64 bits. J'ai un exemple de code de ceci ici: Stackoverflow.com / Questions / 3569783 / ... Aussi un entier 64 bits représenté sous forme d'hexagone a seulement 16 caractères et devrait être une excellente amende pour une utilisation dans une URL.



1
votes

Vous pouvez regarder ce papier: Parfait Ciphers de blocs avec de petits blocs et Les diapositives de la présentation à la conférence FSE 2007.

Le papier explique comment sélectionner de manière aléatoire une permutation d'éléments N (par exemple. L'entier entre 0 et N-1) pouvant être considéré comme un chiffre pour cet ensemble d'éléments N.


0 commentaires

1
votes

La réponse que j'ai postée à cette question s'applique également à la vôtre: utilisez un chiffre à bloc court. En supposant que vos identifiants soient 64 bits, en fait, vous pouvez simplement utiliser Xtea Cipher AS-EST, avec un entier 64 bits comme bloc de données.


1 commentaires

Cela semble assez bon, et le code de Xtea semble assez simple pour être facilement porté à Python. Merci je vais donner cela un coup de feu



0
votes

simple xor ne peut pas être appelé cryptage. L'obfuscation est un mot plus approprié pour cela. J'ai développé un algorithme compact, rapide et espérant que je l'appelle Ayden. C'est sur le domaine public et peut être téléchargé à partir de github . J'espère que c'est utile.


0 commentaires