Является ли AES жизнеспособным решением для создания системы проверки хеша? - PullRequest
0 голосов
/ 01 апреля 2009

Я пишу программу, которая и нравится реализовывать систему проверки данных. Он должен возвращать уникальную строку для любого введенного значения. Мой вопрос сводится к следующему: возможно ли для функции AES возвращать одно и то же значение для двух разных записей? Исходные значения будут взяты из данных, хранящихся на карточке с магнитной полосой.

подробнее

Первоначально я разместил это на своем телефоне, а сейчас только возвращаюсь к этому сообщению.

Я искал в Интернете и, читая статью Википедии о SHA, я вижу, что у SHA-2 (SHA-256/224, SHA-512/384) нет обнаруженных столкновений (при условии, что статья точная / актуальная). Это желательно. Любые рекомендации, какую версию SHA-2 я должен использовать?

Ответы [ 5 ]

2 голосов
/ 01 апреля 2009

AES никогда не сможет вернуть одно и то же значение, если вы используете один и тот же ключ и вектор инициализации для всех вычислений. Вы бы просто зашифровали данные. Обычно вы просто используете алгоритм хеширования, потому что все хеш-коды имеют одинаковую длину независимо от входных данных, в то время как AES выдает результаты, пропорциональные по длине входным данным.

Причина, по которой это невозможно, совершенно очевидна - если AES зашифровывает разные входы для одного и того же выхода, вы не сможете снова расшифровать сообщение, поскольку будет несколько возможных дешифрованных сообщений.

2 голосов
/ 02 апреля 2009

AES - это схема шифрования, а не схема хеширования, поэтому в своем простом приложении она будет возвращать кусок данных, пока ваше сообщение, но зашифровано. Для любого уникального сообщения зашифрованный текст также будет уникальным.

Звучит так, как будто вы хотите получить хеш или «дайджест» ваших данных - посмотрите на что-то вроде SHA256. Это даст вам результат фиксированной длины, независимо от длины ваших данных. Это означает, что существует неизбежно несколько разных входов, которые будут давать одинаковый выход, но они невероятно тонко распределены по невероятно большому пространству.

Тип хэша, который вы должны использовать, зависит от того, пытаетесь ли вы защитить от злонамеренных попыток подорвать вашу схему или просто от случайных ошибок.

1 голос
/ 02 апреля 2009

Исходя из нового вопроса, я бы сказал:

Вы должны использовать любую версию SHA, какую пожелаете, учитывая, что у вас есть место для ее хранения.

Я почти всегда использую SHA-512 для всего, потому что он имеет наименьшую вероятность коллизий, а 64 байта обычно достаточно малы для хранения.

0 голосов
/ 02 апреля 2009

Имейте в виду, что здесь есть два вида схем.

Один из них относится к криптографии, и идея заключается в том, что шифротекст или криптографический хеш выдает как можно меньше информации об оригинале. Это то, что вы хотите в целях безопасности.

Один из них предназначен для обнаружения и исправления ошибок, и в этом случае вы хотите получить как можно больше информации об оригинале. Это то, что вы хотите для обеспечения целостности данных.

Если вы берете криптографический хэш файла, все, что вы можете сказать позже, это то, является ли это точно такой же файл или нет. Если вы используете какую-то схему обнаружения ошибок, вы, вероятно, можете что-то рассказать об ошибке.

0 голосов
/ 01 апреля 2009

AES не обязательно будет возвращать одно и то же значение для одного и того же ввода дважды, если используется только одна и та же клавиша.

Вместо этого вы должны использовать сильный алгоритм хеширования, такой как SHA.

Однако, чтобы ответить на ваш вопрос, AES не может вернуть одно и то же значение для двух разных входов, учитывая один и тот же ключ и IV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...