J'utilise Python 2.7 et je crée un HMAC en utilisant la bibliothèque hmac
. Python 3.3 inclut une fonction compare_digest()
qui va comparer deux digests et résister aux attaques de timing, mais ce n'est pas disponible en 2.7. Le conseil dominant n'est pas de rouler mon propre crypto, donc y at-il des bibliothèques Python matures qui fournissent cette fonctionnalité? PyCrypto ne semble pas.Comment vérifier en toute sécurité un HMAC dans Python 2.7?
Répondre
Pour toute personne qui trouve cette de la recherche, si vous utilisez Django, vous pouvez également utiliser la fonction constant_time_compare
dans django.utils.crypto
.
>>> from django.utils.crypto import constant_time_compare
>>> constant_time_compare("foo", "bar")
False
>>> constant_time_compare("foo", "foo")
True
que cela vient avec la même mise en garde que hmac.compare_digest
(et utilise effectivement hmac.compare_digest
si elle existe):
Note: Si a et b sont de longueurs différentes, ou si une erreur se produit , une attaque de synchronisation pourrait théoriquement révéler des informations sur les types et les longueurs de a et b - mais pas leurs valeurs.
Je vous suggère de simplement utiliser la méthode de comparaison sécurisée disponible en 3.3.
Ceci est une mise en œuvre qui est très similaire à la mise en œuvre de Python:
def compare_digest(x, y):
if not (isinstance(x, bytes) and isinstance(y, bytes)):
raise TypeError("both inputs should be instances of bytes")
if len(x) != len(y):
return False
result = 0
for a, b in zip(x, y):
result |= a^b
return result == 0
peut voir pas comment cela serait contraire à toutes les licences.
Si vous avez accès à Python 2.7.7, compare_digest()
a été récemment rétroportée vers cette version (ainsi que le module SSL 3.x plus sûr en 2.7.9).
- 1. Comment effacer en toute sécurité un fichier/répertoire en Python?
- 2. Python hmac et C# hmac
- 3. Comment vérifier en toute sécurité les limites des tableaux
- 4. Utilisation d'AtomicInteger en toute sécurité pour vérifier en premier
- 5. Comment fermer un IndexReader en toute sécurité?
- 6. Comment utiliser un obfuscateur en toute sécurité?
- 7. Comment déclencher un événement en toute sécurité?
- 8. Comment faire en toute sécurité
- 9. Comment supprimer un projet en toute sécurité dans android studio.?
- 10. Python CGI comment sauvegarder les informations demandées en toute sécurité?
- 11. Comment utiliser file_get_contents en toute sécurité?
- 12. Comment supprimer un objet géré non enregistré en toute sécurité?
- 13. urllib.request en Python 2.7
- 14. Comment télécharger en toute sécurité un fichier dans Appcelerator?
- 15. Comment convertir en toute sécurité ce double dans un int?
- 16. Comment incrémenter en toute sécurité un compteur dans Entity Framework
- 17. Soulever un fil d'événement en toute sécurité
- 18. évaluer en toute sécurité chaîne en Python pour appeler hashlib
- 19. UnicodeDecodeError en Python 2.7
- 20. MSSQL en python 2.7
- 21. python M2Crypto HMAC SHA1
- 22. comment utiliser en toute sécurité LIKE
- 23. Comment verrouiller en toute sécurité cette propriété?
- 24. En Perl, comment créer en toute sécurité un FIFO temporaire?
- 25. Comment utiliser $ _GET en toute sécurité?
- 26. Exécuter C++ dans VM, en toute sécurité
- 27. Comment autoriser l'injection SQL en toute sécurité?
- 28. F # conversion python HMAC en f #
- 29. re.sub dans python 2.7
- 30. Comment utiliser window.history.pushState 'en toute sécurité'
Quelque chose manque à ma réponse, André? –
Obtention de cette erreur lors de l'utilisation de ceci dans 2.7: 'type (s) d'opérande non supporté (s) pour ^: 'str' et 'str' – Trevor