Не все из перечисленных алгоритмов являются алгоритмами шифрования, а именно:
MD5, SHA1, SHA256,… — алгоритмы хеширования, задачей которых является преобразование массива входных данных произвольной длины в (выходную) битовую строку фиксированной длины, то есть в этом случае, получается некий "отпечаток пальца" для входных данных [wiki], и нет возможности сделать обратное преобразование.
HMAC — алгоритмы создания кода проверки подлинности сообщений, использующие алгоримы хеширования [wiki], в этих алгоритмах задействован секретный ключ.
base64 — алгоритм позволяющий представить любую байтовую последовательность в виде печатный символов ASCII, и наоборот.
AES, DES, 3DES — вот это как раз алгоритмы шифрования! они принадлежат к группе симметричных алгоритмов шифрования, то есть для шифрование и расшифровки используется один и тот же секретный ключ — что не дает возможность его распространения по открытому (незащищенному) каналу!
RSA, ECIES — алгоритмы асимметричного шифрования. Данные алгоритмы используют пару ключей: открытый ключ и закрытый ключ. Открытый ключ используется для операций шифрования и проверки подписи, и может распространятся в открытом виде по незащищенным каналам. Закрытый ключ используется для операций расшифровки и создания подписи, и хранится только и владельца.
VirgilSecurity в своей основе использует гибридное шифрование — асимметричное(ECIES) + симметричное(AES256). При таком подходе возникает необходимость в удобном распространении открытых ключей, чем и занимается Virgil Keys Service.
Используется представление точки на эллиптической кривой в байтовой последовательности без сжатия SEC 1 Ver. 2.0 см. секцию "2.3.3 Elliptic-Curve-Point-to-Octet-String Conversion"
А если пишите то почему не писать реальные значения?
Пишется на самом деле реальное зачине, просто для Curve25519 оно всегда равно нулю.
Почему в зашифрованном сообщении много AAAA последовательностей?
Зашифрованное сообщение хранит в себе открытую часть эфемерного ключа, который генерируется в соответствии с алгоритмом ECIES, а раз так, то "AAAA" попадают и туда.
реализации далеки от оптимальных в плане оптимизации по скорости
Если скорость не устраивает, рекомендую использовать fork от VirgilSecurity и кривую Curve25519, при этом для вычислений используется оптимизированный вариант на базе Ed25519
Уверен что там пачка варнингов при сборке вылезает, если врубить -Wall
Это голословное заявление :) MbedTLS собирается на Travis-CI с флагами -Wall -Werror
3. Криптостойкость управляется непосредственно разработчиком конечного продукта, посредством выбора (ограничения выбора) ключей, которые генерируется в его приложении. Решения аналогичного в Java нет, поэтому ответственность за соблюдение криптографических ограничений, на данный момент, лежит полностью на разработчике.
Можно, если ПК1 содержит открытую часть ключа ПК2, и наоборот.
Зачастую вся соль заключается в том, что нужно зашифровать данные для конечного пользователя зная один из его идентификаторов, например email.
Не все из перечисленных алгоритмов являются алгоритмами шифрования, а именно:
MD5, SHA1, SHA256,… — алгоритмы хеширования, задачей которых является преобразование массива входных данных произвольной длины в (выходную) битовую строку фиксированной длины, то есть в этом случае, получается некий "отпечаток пальца" для входных данных [wiki], и нет возможности сделать обратное преобразование.
HMAC — алгоритмы создания кода проверки подлинности сообщений, использующие алгоримы хеширования [wiki], в этих алгоритмах задействован секретный ключ.
base64 — алгоритм позволяющий представить любую байтовую последовательность в виде печатный символов ASCII, и наоборот.
AES, DES, 3DES — вот это как раз алгоритмы шифрования! они принадлежат к группе симметричных алгоритмов шифрования, то есть для шифрование и расшифровки используется один и тот же секретный ключ — что не дает возможность его распространения по открытому (незащищенному) каналу!
VirgilSecurity в своей основе использует гибридное шифрование — асимметричное(ECIES) + симметричное(AES256). При таком подходе возникает необходимость в удобном распространении открытых ключей, чем и занимается Virgil Keys Service.
Используется представление точки на эллиптической кривой в байтовой последовательности без сжатия
SEC 1 Ver. 2.0 см. секцию "2.3.3 Elliptic-Curve-Point-to-Octet-String Conversion"
Пишется на самом деле реальное зачине, просто для Curve25519 оно всегда равно нулю.
Зашифрованное сообщение хранит в себе открытую часть эфемерного ключа, который генерируется в соответствии с алгоритмом ECIES, а раз так, то "AAAA" попадают и туда.
Аутентификация сообщения обеспечивается режимом GCM алгоритма AES
Код также проверяется статическим анализатором CoverityScan:
Ну свое то однозначно лучше и роднее :)
Если скорость не устраивает, рекомендую использовать fork от VirgilSecurity и кривую Curve25519, при этом для вычислений используется оптимизированный вариант на базе Ed25519
Это голословное заявление :) MbedTLS собирается на Travis-CI с флагами
-Wall -Werror
Данный алгоритм реализован как часть библиотеки MbedTLS — https://tls.mbed.org/ctr-drbg-source-code
На дынный момент уязвимостей в данном модуле не найдено — https://tls.mbed.org/security
Данный алгоритм реализован как часть библиотеки MbedTLS — https://tls.mbed.org/ctr-drbg-source-code
На дынный момент уязвимостей в данном модуле не найдено — https://tls.mbed.org/security
From the Java/Android documentation
Java Desktop — Maven:
Java Android — Gradle:
Зачастую вся соль заключается в том, что нужно зашифровать данные для конечного пользователя зная один из его идентификаторов, например email.