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

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

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

Из дополнительных применений называется верификация ввода номеров кредитных карт. Например, вместо практикуемого отображения части номера кредитной карты (**************1234) гораздо нагляднее вывести хорошо запоминающуюся картинку, которую пользователь сможет мгновенно сверить с полученным аналогичным образом изображением, напечатанным на карте. Еще одной областью использования Vash может стать подтверждение корректности ввода закрытых данных, например, вывод изображения позволит пользователю сразу оценить корректно введен пароль или нет.

К сожалению формирование подобных изображений достаточно ресурсоёмкая задача. Выход виделся в реализации алгоритма генерации изображений с использованием OpenCL, расширений для параллельного программирования с возможностью задействования GPU видеокарт. Перенос вычислительной логики на плечи GPU позволил на несколько порядков ускорить генерацию изображений. По оценке разработчиков модифицированный таким образом прототип Vash должен работать в 100-500 раз быстрее реализации на языке Си, выполняемой на CPU. Вариант с OpenCL был опробован в реализации на языке Python с использованием библиотеки PyOpenCL.

На данный момент реализовать идею полного привлечения GPU для вычислений не удалось и разработчики ограничились использованием CPU. Первая проблема всплыла из-за необходимости организации обхода дерева в процессе генерации изображения — необходимый уровень вложенности удалось реализовать только на CPU. Вторая проблема оказалась более серьезной — разнообразие предварительных вычислений до получения хэша, и, соответственно, необходимость компиляции кода для GPU в процессе создания изображения. Компиляторы OpenCL от компаний AMD и Nvidia генерируют очень быстрый и прекрасно оптимизированный код, но сам процесс компиляции занимает слишком много времени. В итоге, генерация изображения на стороне GPU занимает всего 50-100 нс, но на сопутствующие операции тратится около 20-60 секунд времени CPU, что неприемлемо.

Источник: http://www.opennet.ru/opennews/art.shtml?num=31207