Примечание. Это репост исходного сообщения в блоге во время GSoC ’17. Когда мой экземпляр AWS вышел из строя, я перенес сюда свои старые записи в блоге.
Дата публикации: 12 июля 2017 г.

GSoC 17: шифрование файла на стороне клиента: неделя 6

Этот пост в блоге подводит итог моей шестой недели работы с Google Summer of Code 2017 с Drupal.

Работа на этой неделе началась с доработки и завершения менеджера ключей (и всех поколений ключей), который будет отвечать за функционирование этого модуля, а менеджер ключей как на фронтенде, так и на бэкенде был завершен и отправлен в ветку js_key_manager. Одна из ошибок, с которыми я столкнулся в JS, заставила меня переписать код для этого полного скрипта. Но, наконец, после того, как это заработало, увидев следующий экран, где в переменных больше не было нулевых или ложных значений, я воскликнул: «Ура!»

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

Когда я начал работать с другой частью, я зафиксировал весь свой код, а затем переключился на новую ветку «js_encrypt».

Шифрование файлов

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

Чтобы подключить библиотеку «client_side_file_crypto/csfcEncrypt», определенную в файле libraries.yaml, внутри использовалась $form['#attached'] тот крючок.

Мне пришлось вызывать функцию при изменении поля формы файла,
$(“:file”).change(function(e){}

И переопределение действия загрузки по умолчанию с помощью event.preventDefault();

Для проверки того, сработало ли изменение формы и переопределение JS, я сначала использовал окно предупреждения, после очистки кеша, вуаля! Это сработало!

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

Также после встречи на этой неделе с Коланом и Тальей Талха указал, что функция Math.random() для генерации симметричного ключа не является криптографически надежной.

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