Intel Core i5 (Clarkdale): анализ аппаратного ускорения шифрования AES. Использование новых инструкций шифрования Intel® стандарта AES в Android

Ребята всем даровчик. Говорим мы о такой штуке как Intel AES-NI, это можно встретить в биосе, но вот что это? Будем узнавать. И вот я нашел официальный сайт Intel, где написано, что Intel AES-NI это некий набор команд шифрования, который дополняет алгоритм Advanced Encryption Standard (AES) и ускоряет процесс шифрования данных в процах Intel Xeon (это серверные) и Intel Core (обычные домашние).

Intel AES-NI включает в себя семь новых команд и позволяет защитить данные типа на более высоком уровне безопасности. В принципе все понятно, Intel AES-NI это какое-то новое шифрование, но зачем это нужно обычному человеку? Попробую выяснить…

Ага, то есть AES-NI выполняет некоторые моменты AES на аппаратном уровне, то есть прямо в самом проце. Ну вот теперь я немного понимаю. То есть AES-NI улучшает работу AES, ускоряет типа. Шифроваться должно быстрее, единственное что я не понял, это шифроваться что? Диск в винде шифроваться, или архив WinRAR будет быстрее создаваться? Вот это я пока не могу понять. Но по этому вопросу я нашел кое какие разьяснения, гляньте:

То есть шифрование BitLocker должно быть типа быстрее. А вот по поводу транзакций в интернете, это я не совсем понимаю.. Это что, получается процессор может участвовать в шифровании интернет-соединений? Ибо весь процесс транзакции как правило шифруется, даже используется для этого HTTPS-протокол….

Короче ребята, я вроде все понял. Есть такая штука как AES, правильно? Вот что это такое? Это симметричный алгоритм блочного шифрования, короче дичь. Но не в этом суть. Я так понимаю что AES используется в некоторых программах, логично? Ну вот. А вот опция Intel AES-NI она как бэ ускоряет работу алгоритма AES, понимаете? Ибо эта опция работает на аппаратном уровне прямо в проце.

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

Ребята, нашел оч интересную картинку, где показано преимущество использования AES-NI, посмотрите:

Ну вообщэто разница заметная…

Так, какой вывод можно сделать? Intel AES-NI это некая штука, которая встроена в сам процессор, на самом деле это какие-то инструкции, и эти инструкции помогают работать алгоритму AES быстрее. Сам алгоритм может использоваться разными программами, и при помощи Intel AES-NI, эти программы будут свою работу выполнять быстрее =)

Ну а вот ребята этот пункт Intel AES-NI в биосе:

Ребята, вот мы и разобрались с тем что такое Intel AES-NI, ну а если что не так, то сильно не ругайте. Удачи вам и чтобы вы были счастливы!

Бесспорная популярность персональных компьютеров стимулирует разработчиков делать их совершеннее. Шифрование данных – важная часть использования мессенджеров, социальных сетей и прочих видов интернет-коммуникаций. Без него вся ваша информация доступна любому человеку из сети, из любого места. Команды шифрования AES-NI от компании Intel представляют собой улучшенный алгоритм Advanced Encryption Standard. Эти инструкции используются в серверных процессорах Intel Xeon и десктопных/профессиональных Intel Core. Если вы задаётесь вопросом «Intel AES NI , что это в биосе ?», то эта статья будет для вас как никогда кстати.

Зачем её активировать

Intel AES-NI сосредотачивается на таких задачах:

  • защита транзакций в Интернете и интрасетях;
  • шифровании дисков (при использовании Microsoft BitLocker, к примеру);
  • шифровке некоторых частей уже защищённых транзакций (шифрование на прикладном уровне).

Как результат, носители информации зашифровываются быстрее, что можно увидеть на примере программы PGPdisk. Кодировка в режиме CBC/256 с включёнными инструкциями AES-NI эффективней на 20%, нежели без них. Тест производился на файле размером 351 мегабайт. Также стоит отметить скорость дешифрования в CBC/256 с AES-NI – прирост составляет девять процентов.

Как включить функцию в BIOS

Делается это в несколько нажатий кнопок на клавиатуре. Помните, что AES-NI работает только на процессорах от компании Intel. Также стоит проверить поддержку этой технологии вашим ЦП на официальном сайте производителя. Инструкция по включению:

  1. После включения компьютера, базовой системы ввода/вывода.
  2. Перейдите во вкладку «Advanced». В ней найдите строку «Intel AES-NI» и установите значение «Enabled».
  3. Сохраните применённые установки и дождитесь загрузки операционной системы.

Включение опции

Заключение

AES-NI – совокупность инструкций, позволяющая процессору лучше кодировать и декодировать файлы на компьютере. Технология принадлежит компании Интел и используется исключительно её продуктами. Её стоит включить, делается это через БИОС, если вы занимаетесь криптованием объёмных файлов и/или часто проводите транзакции во всемирной паутине.

32-нм Intel Westmere добавляет поддержку ускорения AES: так ли она нужна?

Сегодня безопасность является важной темой – однако важной её считают, главным образом, только профессионалы. Впрочем, если безопасность становится маркетинговым элементом или превращается в характеристику производительности, то такие компании, как Intel, начинают активно её продвигать. Стандарт AES или Advanced Encryption Standard сертифицирован Управлением национальной безопасности США (NSA) и правительством США, а также многими другими органами. 32-нм двухпроцессорное поколение процессоров Intel обещает существенный прирост производительности шифрования и расшифровки AES благодаря новым инструкциям (только двуядерные процессоры Core i5). Мы решили оценить преимущества в реальной жизни и сравнили двуядерный процессор Core i5-661 с новыми инструкциями AES с четырёхъядерным процессором Core i7-870, который не имеет поддержки ускорения шифрования.

Нажмите на картинку для увеличения.

Шифрование на самом деле используется намного более интенсивно, чем обычно замечают пользователи. Всё начинается с сайтов в Интернете, которые содержат конфиденциальную информацию, такую как личные данные пользователей, либо с сайтов, где есть конфиденциальная информация о транзакциях: все они используют шифрование TLS или SSL. Такие сервисы, как VoIP, мессенджеры и электронная почта также могут защищаться таким же способом. Виртуальные частные сети (VPN, Virtual Private Network) – ещё один пример, вероятно, очень популярный. Шифрование также затрагивает и такие конфиденциальные области, как электронные платежи. Впрочем, TLS/SSL – это криптографические протоколы связи, а AES, который Intel ускоряет, начиная с нового 32-нм поколения процессоров, является стандартом шифрования общего назначения. Его можно использовать для шифрования отдельных файлов, контейнеров данных и архивов или даже зашифровывать разделы и диски целиком – будь то USB-брелок или системный жёсткий диск. AES может выполняться программно, но есть и продукты с аппаратным ускорением, поскольку шифрование и расшифровка являются довольно серьёзной вычислительной нагрузкой. Такие решения, как TrueCrypt или Microsoft BitLocker, являющийся частью Windows Vista или Windows 7 Ultimate, способны шифровать целые разделы "на лету".

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

Одно можно сказать точно: лучше всего быть аккуратным и благоразумным, чем наоборот – тем более что для этого требуется не так много усилий. Подход Intel к добавлению ускорения AES не охватывает все приложения шифрования и сценарии, только самый популярный стандарт – при этом вы получите всё это бесплатно во всех будущих 32-нм настольных процессорах для массового рынка или для более дорогих сегментов. Но действительно ли новые инструкции AES New Instructions обеспечивают существенный прирост производительности в типичных сценариях шифрования или это, скорее, плод усилий отдела маркетинга? Давайте посмотрим.

Что такое AES?

AES расшифровывается как "Advanced Encryption Standard" – это наиболее популярный стандарт симметричного шифрования в мире ИТ. Стандарт работает с блоками размером 128 бит и поддерживает 128-, 192- или 256-битные ключи (AES-128, AES-192 и AES-256). Многие утилиты шифрования, та же TrueCrypt, поддержали алгоритм AES в самом начале его существования. Но самый большой фактор успеха AES, конечно, заключается в его принятии правительством США в 2002 году, при этом в 2003 году он был принят как стандарт для защиты секретных данных.

Шифрование данных с помощью AES

Шифрование AES базируется на системе подстановок с перестановкой, то есть над данными проводится серия математических операций, чтобы создать значительно модифицированный массив данных (зашифрованный). В качестве исходной информации выступает текст, а ключ отвечает за выполнение математических операций. Операции могут быть как совершенно простыми, например, сдвиг битов или XOR, так и более сложными. Один проход можно легко расшифровать, поэтому все современные алгоритмы шифрования построены на нескольких проходах. В случае AES это 10, 12 или 14 проходов для AES-128, AES-192 или AES-256. Кстати, ключи AES проходят такую же процедуру, что и пользовательские данные, то есть они представляют собой изменяющийся раундовый ключ.

Процесс работает с массивами 4x4 из одиночных байтов, также называемых боксами: S-box используются для подстановок, P-box – для перестановок. Подстановки и перестановки выполняются на разных этапах: подстановки работают внутри так называемых боксов, а перестановки меняют информацию между боксами. S-box работает по сложному принципу, то есть даже если единственный входной бит будет меняться, то это повлияет на несколько выходных битов, то есть свойства каждого выходного бита зависят от каждого входного бита.

Использование нескольких проходов обеспечивает хороший уровень шифрование, при этом необходимо соответствовать критериям рассеивания (diffusion) и запутывания (confusion). Рассеивание выполняется через каскадную комбинацию трансформаций S-box и P-box: при изменении только одного бита во входном тексте S-box будет модифицировать выход нескольких бит, а P-box будет псевдослучайно распространять этот эффект по нескольким S-box. Когда мы говорим о том, что минимальное изменение на входе даёт максимальное изменение на выходе, мы говорим об эффекте снежного кома.

Насколько надёжно шифрование AES?

В последнее время идёт немало обсуждений так называемых взломов, которые обходят необходимость запуска расширенного поиска методом грубой силы для нахождения правильного ключа расшифровки. Технологии, такие как атаки XSL и атаки related-key обсуждаются довольно интенсивно – но успех невелик. Единственный работающий способ взлома шифрования AES заключается в так называемой атаке побочного канала (side-channel). Для её осуществления атака должна происходить только на host-системе, на которой выполняется шифрование AES, и при этом вам необходимо найти способ получения информации о синхронизации кэша. В таком случае можно отследить число тактов компьютера до завершения процесса шифрования.

Конечно, всё это не так легко, поскольку вам требуется доступ к компьютеру, причём достаточно полный доступ для анализа шифрования и права на выполнения кода. Теперь вам наверняка понятно, почему "дыры" в системе безопасности, которые позволяют злоумышленнику получить такие права, пусть даже они звучат совершенно абсурдно, необходимо закрывать как можно быстрее. Но не будем растекаться мыслью по древу: если вы получите доступ к целевому компьютеру, то извлечение ключа AES – дело времени, то есть уже не трудоёмкая задача для суперкомпьютеров, требующая огромных вычислительных ресурсов.

AES внутри Intel

На данный момент интегрированные в CPU инструкции AES начинают иметь смысл – независимо от возможных преимуществ по производительности. С точки зрения безопасности процессор может обрабатывать инструкции AES в инкапсулированном виде, то есть ему не требуются какие-либо таблицы преобразования, необходимые для атаки методом побочного канала.



СОДЕРЖАНИЕ

В современном мире шифрование используется практически повсеместно, как для защиты особо важной информации в специальных областях (оборонный сектор, банковская сфера и т.д.), так и в составе бытовых устройств: компьютеров, смартфонов, телевизоров. Более того, с каждым годом расширяется сфера применения криптографии, и растет объем передаваемых (хранимых) зашифрованных данных.

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

Использование шифрования

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

  • при подключении к большинству видов беспроводных сетей передачи данных (Wi-Fi, Bluetooth и пр.);
  • в мобильной связи;
  • мобильные ОС (iOS, Android) шифруют данные на устройствах для защиты от несанкционированного доступа;
  • безопасное хранение паролей требует определенных криптографических функций (т.е. большинство устройств с возможностью задания пароля использует шифрование);
  • банковские карты, банкоматы, терминалы оплаты всегда защищены криптографически;
  • криптовалюты основаны на принципах шифрования.

Все больше организаций и людей осознают важность применения шифрования для защиты данных. Так, совместными усилиями многих компаний, в частности, Google, доля зашифрованного HTTP-трафика выросла с 30% в начале 2014 года до 70% на начало 2018 .

В то же время, любое шифрование - математически сложное преобразование данных и требует дополнительных вычислительных ресурсов от аппаратуры. В зависимости от сценария работы с данными внедрение шифрования может снизить общую пропускную способность (объем обрабатываемых данных в единицу времени) в несколько раз .

Алгоритмы шифрования

Существует большое количество криптографических алгоритмов . Поддерживать их все было бы технически трудно осуществимо.

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

Среди блочных симметричных алгоритмов прежде всего следует выделить [ (Advanced Encryption Standard). Данный алгоритм был отобран в качестве национального стандарта США по результатам конкурса . AES является основным симметричным алгоритмом шифрования во многих протоколах и технологиях (TLS, Wi-Fi, Bluetooth (с версии 4.0), GPG, IPsec, Bitlocker (шифрование файловой системы Windows), LUKS (шифрование файловой системы Linux), Miscrosoft Office, многие программы-архиваторы (WinZip, 7-zip) и пр.).

Также крайне широко используются алгоритмы криптографического хеширования . В связи с тем, что алгоритм MD5 был признан небезопасным, в настоящее время наиболее распространенными являются алгоритмы серии SHA, прежде всего, SHA-1 и SHA-2 , также являющимися стандартами FIPS США. Им на смену со временем придет алгоритм SHA-3 , ставший в 2012 году победителем соответствующего конкурса.

Среди алгоритмов с открытым ключом стоит отметить RSA, DSA и Diffe-Hellman.

В процессорах наиболее распространенной архитектуры x86 (производителей Intel и AMD) последних поколений реализованиы специальные инструкции для ускорения вычислений по алгоритмам AES и SHA-1, SHA-2 (256 бит).

Инструкции Intel

AES

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

Набор новых инструкции носит название AES-NI (AES New Instructions)и состоит из четырёх инструкций для шифрования AES

  • AESENC - Выполнить один раунд шифрования AES,
  • AESENCLAST - Выполнить последний раунд шифрования AES и расшифровки
  • AESDEC - Выполнить один раунд расшифрования AES,
  • AESDECLAST - Выполнить последний раунд расшифрования AES

и ещё двух инструкции для работы с ключом AES:

  • AESIMC - Inverse Mix Columns,
  • AESKEYGENASSIST - Поспособствовать в генерации раундового ключа AES.

Как и раньше, инструкции относятся к SIMD, то есть к типу "одна инструкция много данных" (Single Instruction Multiple Data). Поддерживаются все три ключа режима AES (с длинами ключей 128, 192 и 256 битов с 10, 12 и 14 проходами подстановки и перестановки).

Использование этих инструкций обеспечивает ускорение операций шифрования в несколько раз .

SHA

  • Westmere:
    • Westmere-EP (Xeon 56xx)
  • Clarkdale (кроме Core i3, Pentium и Celeron)
  • Arrandale (кроме Celeron, Pentium, Core i3, Core i5-4XXM)
  • Sandy Bridge:
    • все настольные, кроме Pentium, Celeron, Core i3
    • мобильные: только Core i7 и Core i5
  • Ivy Bridge (только i5, i7, Xeon and i3-2115C)
  • Haswell (все, кроме i3-4000m, Pentium and Celeron)
  • Broadwell (все, кроме Pentium и Celeron)
  • Silvermont/Airmont (все, кроме Bay Trail-D и Bay Trail-M)
  • Goldmont
  • Skylake
  • Kaby Lake
  • Coffee Lake
  • Bulldozer
  • Piledriver
  • Steamroller
  • Excavator
  • Jaguar

Инструкции SHA поддерживаются процессорами Intel, начиная с архитектуры Goldmont (2016 год), процессорами AMD - с архитектуры Zen (2017 год).

Другие процессоры

Процессоры общего назначения других архитектур и производителей также часто включают поддержку специальных криптографических инструкций.

Так, поддержка алгоритма AES реализована в процессорах:

Архитектура ARM также имеет набор инструкций для алгоритмов SHA:

  • SHA1C - SHA1 hash update accelerator, choose
  • SHA1H - SHA1 fixed rotate
  • SHA1M - SHA1 hash update accelerator, majority
  • SHA1P - SHA1 hash update accelerator, parity
  • SHA1SU0 - SHA1 schedule update accelerator, first part
  • SHA1SU1 - SHA1 schedule update accelerator, second part
  • SHA256H - SHA256 hash update accelerator
  • SHA256H2 - SHA256 hash update accelerator, upper part
  • SHA256SU0 - SHA256 schedule update accelerator, first part
  • SHA256SU1 - SHA256 schedule update accelerator, second part

Переводим... Перевести Китайский (упрощенное письмо) Китайский (традиционное письмо) Английский Французский Немецкий Итальянский Португальский Русский Испанский Турецкий

К сожалению, мы не можем перевести эту информацию прямо сейчас - пожалуйста, повторите попытку позже.

Введение

В этой статье описывается поддержка новых инструкций шифрования Intel® стандарта AES (Intel® AES-NI) в Android: что это, как это использовать и как измерять производительность. Также описывается модель использования и примеры в сочетании с двумя сценариями шифрования, демонстрирующими применение инструкций Intel AES-NI. Опытные разработчики могут пропустить первые четыре части этой статьи и перейти сразу к последней части, чтобы ознакомиться со сценариями использования. Менее опытным разработчикам, пожалуй, стоит прочесть всю статью.

Новые инструкции шифрования стандарта AES (Intel AES-NI)

Инструкции Intel AES-NI были предложены в марте 2008 г. в качестве расширения набора инструкций архитектуры х86 для микропроцессоров Intel и AMD. Цель этого набора инструкций состоит в увеличении скорости приложений, выполняющих шифрование и расшифровку данных по стандарту AES.

Инструкции Intel AES-NI перечислены в таблице 1.

Таблица 1. Инструкции Intel® AES-NI

Проверка поддержки Intel AES-NI в Android

Проверить, поддерживается ли Intel AES-NI той или иной платформой, можно с помощью CPUID ; проверьте значение CPUID.01H:ECX.AESNI = 1 . Также можно использовать функцию check_for_aes_instructions из образца библиотеки Intel AES-NI.

Использование Intel AES-NI в Android

Использовать Intel AES-NI в Android можно разными способами:

  • написать код C/C++ и использовать код ассемблера напрямую
  • использовать существующую стороннюю библиотеку, например, OpenSSL*
  • использовать API Java* Crypto из состава Android Kitkat

TДля компиляции собственной библиотеки/приложения для x86 в ОС Android требуется подготовить автономную цепочку инструментов с помощью команды make-standalone-toolchain.sh в Android NDK:

$NDK_PATH/build/tools/make-standalone-toolchain.sh –install-dir=$STANDALONE_TOOCHAIN_PATH –toolchain=x86-4.8 –platform=android-14 –ndk-dir=$NDK_PATH export PATH=$PATH:$STANDALONE_TOOCHAIN_PATH

Использование библиотеки сборки

Библиотека находится в папке intel_aes_lib . Также ее можно загрузить по адресу . Используйте GCC версии 4.4 или более поздней, то есть версия NDK должна быть новее, чем NDK v3. (Здесь мы используем android-ndk-r9 для тестирования.)

makefile/shell скрипт для сборки версий под Android отсутствует. Для компиляции можно изменить файл mk_lnx86.sh . Основное изменение состоит в использовании $STANDALONE_TOOCHAIN_PATH/bin/i686-linux-android-gcc вместо GCC по умолчанию. Также следует использовать параметры pass –D__ANDROID__ .

Export CC=”$STANDALONE_TOOLCHAIN_PATH/bin/i686-linux-android-gcc –D__ANDROID__ --sysroot=$STANDALONE_TOOLCHAIN_PATH/sysroot -I$STANDALONE_TOOLCHAIN_PATH/sysroot/include”

После компиляции можно перенести двоичную исполняемую программу в Android и протестировать ее. Также можно использовать исходный код непосредственно в ваших приложениях или использовать созданную двоичную библиотеку в NDK.

Использование OpenSSL

Инструкции Intel AES-NI используются многими библиотеками, например crypto++ polar SSL IPP OpenSSL и другими. (Мы используем OpenSSL в качестве эталона - поддерживаемые в OpenSSL инструкции Intel AES-NI из экспериментальной версии 1.0).

Начиная с Android 4.3, в OpenSSL в AOSP присутствует поддержка Intel AES-NI, поэтому вам достаточно скомпилировать код с нужной конфигурацией. Также можно загрузить его с официального веб-сайта и скомпилировать самостоятельно, а затем использовать файл *.a/*.so напрямую в вашем проекте.

1) Загрузка ‒ можно загрузить OpenSSL по адресу http://www.openssl.org/source/. В настоящее время в Android 4.2 используется openssl-1.0.1c а в Android 4.4 - openssl-1.0.1e .Нужно использовать такую же версию OpenSSL, как в целевой системе.

(2) Компиляция - выполните следующую команду в консоли:

Cd $OPENSSL_SRC_PATH export CC=”$STANDALONE_TOOCHAIN_PATH/bin/i686-linux-android-gcc –mtune=atome –march=atom –sysroot=$STANDALONE_TOOCHAIN_PATH/sysroot” export AR=$STANDALONE_TOOCHAIN_PATH/bin/i686-linux-android-ar export RANLIB=$STANDALONE_TOOCHAIN_PATH/bin/i686-linux-android-ranlib ./Configure android-x86 –DOPENSSL_IA32_SSE2 –DAES_ASM –DVPAES_ASM make

После этого файл libcrypto.a появится в папке верхнего уровня. Для использования файла *.so введите “Configure shared android-x86 *** ”.

(3)Используйте OpenSSL через NDK в проекте Android: создайте проект Android , объявите связанную с OPENSSL функцию как нативную , затем используйте код в jni/*.c .

После этого нужно скопировать файлы *.a/*.so и файл заголовка в проект.

Mkdir jni/pre-compiled/ mkdir jni/include cp $OPENSSL_PATH/libcrypto.a jni/pre-compiled cp –L -rf $OPENSSL_PATH/include/openssl jni/include

Затем добавьте следующую строку в файл jni/Android.mk :

… LOCAL_MODULE:= static LOCAL_SRC_FILES:= pre-compiled/libcrypto.a … LOCAL_C_INCLUDES:= include LOCAL_STATIC_LIBRARIES:= static –lcrypto …

Затем можно использовать функции, предоставленные в OpenSSL, для реализации ваших функций encrypt/decrypt/SSL . Чтобы использовать Intel AES-NI, используйте функцию серии EVP_* , как показано ниже. При этом аппаратный модуль Intel AES-NI будет автоматически задействован для шифрования и расшифровки AES, если ЦП это поддерживает.

//declare EVP_CIPHER_CTX en, de; //init EVP_CIPHER_CTX_init(&en); EVP_CIPHER_CTX_init(&de); EVP_DecryptInit_ex(&de, NULL, NULL, NULL, NULL); //decrypt & encrpyt EVP_DecryptUpdate(&de, plaintext, &bytes_written, ciphertext, len); EVP_EncryptUpdate(&en, ciphertext, &cipher_len, plaintext, len); //clean up EVP_CIPHER_CTX_cleanup(&en); EVP_CIPHER_CTX_cleanup(&de);

Затем используйте ndk-build для компиляции.

Ndk-build APP_ABI=x86

(4) Использование API Java Crypto: в Android Kitkat поставщик OpenSSL с именем “AndroidOpenSSL ” поддерживает Intel AES-NI, поэтому вы можете использовать javax.crypto.Cipher напрямую.

Cipher cipher = Cipher.getInstance(AES_ALGORITHM, “AndroidOpenSSL”); cipher.init(*);

Performance Measurement

Измерение производительности

Средства тестирования

(1) Используйте средства OPENSSL. Команда openssl в составе OpenSSL может выполнять множество задач. Ее можно применять для измерения производительности с помощью openssl speed . По умолчанию openssl ((при сборке с параметром AES_ASM) будет автоматически использовать аппаратное ускорение Intel AES-NI. Также можно без труда отключить аппаратное ускорение, задав одной переменной среды: OPENSSL_ia32cap значение ~0x200000200000000

Openssl speed –evp aes-256-cbc OPENSSL_ia32cap=~0x200000200000000 openssl speed –evp aes-256-cbc

(2) Используйте самодельную программу.

Рисунок 1. Созданная нами тестовая программа.

(3) Intel® Mobile Platform Monitor (Intel® MPM) - это средство отслеживания электропотребления для получения подробной информации о состоянии ЦП/ГП/питания и т. п. Дополнительные сведения см. по адресу

Рисунок 2. Программа Intel® MPM

stop profiling, затем сохраните данные резуль¬татов. Результаты отображаются в виде текстовой сводки или в виде графика.

(4) Используйте тестовое приложение из библиотеки Intel AES-NI, см . Можно включить или отключить AESNI в BIOS в некоторых тестовых проектах, таких как aes_gladman_subset , для демонстрации результатов производительности.

Результаты тестирования

Мы запустили [укажите программу] на планшете с процессором Bay Trail под управлением Android 4.4. Результаты нашего тестирования показали повышение производительности шифрования и расшифровки в 4–11 раз, а также экономию свыше 40 % электроэнергии при использовании Intel AES-NI.

Подробные данные тестирования

Оборудование: BAYTRAIL_FFRD8 PR1, ОС: ANDROID 4.4
РЕЖИМ
(CBC/256)
Размер файла Intel® AES-NI включено Intel® AES-NI отключено
Время (с) без ввода-вывода Время (с) с вводом-выводом Время (с) без ввода-вывода Время (с) с вводом-выводом
Шифрование 351M 2.89 15.4 14.59 25.61
56M 0.48 2.35 2.63 4.55
Расшифровка 351M 1.76 38.144 19.78 28.51
56M 0.29 1.9 3.16 4.62

    Без ввода-вывода из приведенной выше таблицы

    Шифрование: повышение производительности почти в 5 раз, аналогично результатам при использовании OPENSSL
    Расшифровка: повышение производительности почти в 11 раз

    С вводом-выводом из приведенной выше таблицы

    Шифрование: повышение производительности почти в 1,9 раза
    Расшифровка: повышение производительности почти в 2 раза

Сценарии использования Intel AES-NI

Алгоритм AES широко используется в различных сценариях защиты данных, таких как шифрование при передаче данных в сети, шифрование целых дисков или отдельных файлов. Во всех этих сценариях можно использовать Intel AES-NI при условии поддержки нужных инструкций центральным процессором. На рис. 6 показана типичная передача данных в сети; все данные, передаваемые между пользователями и серверами, шифруются после прохождения проверки подлинности.

Рисунок 6. Типичная передача данных в сети

Еще один типичный сценарий использования - шифрование целых дисков или шифрование отдельных файлов, когда пользователи должны сохранять данные в локальном хранилище. На рис. 7 показан весь рабочий процесс от пользователя до хранилища:

Рисунок 7. Весь рабочий процесс шифрования

Аппаратные инструкции Intel AES-NI обеспечивают и высокую производи-тельность, и экономию электроэнергии, что особенно важно для мобильных устройств, таких как смартфоны и планшеты. Управление мобильными устройствами (MDM) и управление мобильным содержимым (MCM) - крайне важные факторы для корпоративных решений безопасности. В этом разделе описывается Intel AES-NI в сочетании с MDM и MCM.

Хороший пример MDM: администраторы отправляют сообщения или команды конечным пользователям, при этом все передаваемые конфиденциальные данные должны быть зашифрованы. Программное решение AES быстро расходует заряд аккумулятора при частой передаче данных, но решение Intel AES-NI использует аппаратные решения, экономящие электроэнергию и повыша-ющие производительность. На рис. 8 показан типовой сценарий, в котором администраторы отправляют команды пользователям с использованием шифрования на базе Intel AES-NI. Рабочий процесс включает шифрование команд перед их отправкой и расшифровку данных для выполнения команд на устройствах конечных пользователей.

Рисунок 8. Обмен данными MDM с использованием криптографии AES

Пример MCM: пользователи получают доступ к конфиденциальным данным, таким как документы, изображения, видео и т. п., с корпоративных серверов. Такие передаваемые данные нуждаются в надежной защите. Все данные должны быть зашифрованы перед отправкой конечным пользователям; на устройствах пользователей данные должны также храниться в зашифрованном формате. На рис. 9 показан типичный рабочий процесс MCM с начала и до конца при чтении и сохранении данных конечным пользователем. Инструкции Intel AES-NI поддерживают 256-разрядный алгоритм шифрования, поэтому это превосходное аппаратное решение для систем безопасности корпоративного уровня и для выполнения требований конфиденциальности.

Рисунок 9. Рабочий процесс MCM

Для задействования аппаратного ускорения Intel AES-NI разработчикам необхо-димо использовать программирование NDK. На рис. 10 показаны типичные взаимоотношения между уровнями приложений Android, модулем шифрования Android и модулем Intel AES-NI C/C++. Java Native Interface (JNI) используется для связывания функций C/C++ с функциями Java. Если программирование в NDK вам незнакомо, см. справочники по NDK для получения дополнительных сведений.

Рисунок 10. Типичные взаимосвязи между уровнями

Заключение

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

Для получения дополнительных сведений о средствах Intel® разработчики Android могут посетить следующие сайты: Intel® Developer Zone for Android .

Об авторах

Чжань Ли (Zhang Li) - инженер по разработке приложений в отделе Intel® Software and Solutions Group (SSG) в подразделении Developer Relations Division в составе группы Mobile Enabling Team. Он занимается поддержкой приложений для Android.

Янчинь Вань (Yanqing Wang) - инженер по разработке приложений в отделе Intel® Software and Solutions Group (SSG) в подразделении Developer Relations Division в составе группы Mobile Enabling Team. В круг его ответственности входит управляемость и безопасность корпоративных решений. Он обладает статусом Intel® Developer Zone (IDZ) Black Belt.

Справочные материалы

Intel, эмблема Intel, Atom, Celeron, Core, Pentium и Xeon являются товарными знаками корпорации Intel в США и в других странах.
*Прочие наименования и товарные знаки могут быть собственностью третьих лиц.
© Intel Corporation, 2014. Все права защищены.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: