📄Работа №130630

Тема: Компиляция сертифицированных F*-программ в робастные Web-приложения

📝
Тип работы Магистерская диссертация
📚
Предмет программирование
📄
Объем: 36 листов
📅
Год: 2017
👁️
Просмотров: 70
Не подходит эта работа?
Закажите новую по вашим требованиям
Узнать цену на написание
ℹ️ Настоящий учебно-методический информационный материал размещён в ознакомительных и исследовательских целях и представляет собой пример учебного исследования. Не является готовым научным трудом и требует самостоятельной переработки.

📋 Содержание

Введение 4
1. Постановка задачи 6
2. Обзор 7
2.1. Язык F* 7
2.2. Особенности языка JavaScript 10
2.3. Инструмент Flow 11
2.4. Инструменты трансляции программ на OCaml в JavaScript-приложения 12
2.5. Проект HACL* 14
3. Правила трансляции с языка F* на JavaScript 15
3.1. Описание подхода 15
3.2. Правила трансляции 16
4. Архитектура инструмента и детали реализации 26
4.1. Архитектура инструмента для компиляции F*-программ в робастные
Веб-приложения 26
4.2. Процесс построения JavaScript-приложения из F*-программы 27
4.3. Работа с библиотечными функциями 27
4.4. Взаимодействие с модулями 28
5. Экспериментальное исследование 29
Заключение 33
Список литературы 34

📖 Введение

В последнее время происходит стремительный рост количества устройств, подключаемых к Интернет. Взаимодействие между этими устройствами осуществляется
с использованием различных протоколов. В зависимости от целей и потребностей
пользователей Интернет-устройств формулируются различные требования к таким
протоколам. Одно из важных требований является обеспечение конфиденциальности и целостности пользовательских данных. Например, при оплате онлайн-покупок
банковской картой покупатель хочет быть уверен в том, что данные его карты не
попадут к злоумышленникам, а банк получит именно те данные, которые были введены пользователем. Безопасность соединения таких Интернет-устройств зависит от
используемых криптографических протоколов и кода Веб-приложений, который чаще всего создается на JavaScript [5]. Поэтому необходимо гарантировать безопасность
используемых протоколов и Веб-приложений, а для последних еще и робастность
(robustness). Веб-приложение является робастным, если оно продолжает работу даже
при неверных входных данных, а не завершается аварийно.
Для работы Веб-приложений широко используется криптографический протокол
Transport Layer Security (TLS) [3], который обеспечивает защищенную передачу данных. Для установки соединения между клиентом и сервером протокол сначала выполняет процедуру подтверждения сеанса связи, которая включает в себя согласование используемых алгоритмов шифрования и хэш-функций, валидацию сертификата
сервера. После этого протокол устанавливает безопасное соединение, которое обеспечивает конфиденциальность передаваемых данных. Для сохранения целостности и
аутентификации сообщений используются так называемые коды аутентификации —
дополнительная информация, получаемая на основе передаваемых данных и позволяющая доказать, что сообщение не изменилось и не было подделано. Несмотря на
продолжительное время разработки криптографических библиотек (например, библиотека OpenSSL [19] разрабатывается с 1998 года), они остаются подвержены хакерским атакам. При этом многие атаки используют ошибки, допущенные в программном
обеспечении. Например, ставшая известной в 2014 году уязвимость Heartbleed [36] в
криптографической библиотеке OpenSSL позволяла несанкционированное чтение памяти на сервере или на клиенте.

Возникли сложности?

Нужна качественная помощь преподавателя?

👨‍🎓 Помощь в написании

✅ Заключение

При выполнении данной работы были получены следующие результаты:
• сформулированы правила трансляции с языка F* на JavaScript, гарантирующие
сохранение аннотаций типов;
• выполнена реализация предложенного подхода на языке F*. Исходный код реализованного инструмента доступен по ссылке https://github.com/FStarLang/
FStar/tree/polubelova_backends, автор принимал участие под учетной записью polubelova;
• проведено экспериментальное исследование реализованного инструмента на примерах из криптографической библиотеки HACL*.
В дальнейшем планируется добавить возможность компиляции F*-программ в
WebAssembly + JavaScript приложения и доказать корректность такой компиляции.
Также планируется провести апробацию полученного инструмента на криптографической библиотеке HACL*, для которой нужно будет реализовать F*-библиотеки, используемые при верификации программ, на языке JavaScript.
Нужна своя уникальная работа?
Срочная разработка под ваши требования
Рассчитать стоимость
ИЛИ

📕 Список литературы

[1] Chlipala Adam. Certified programming with dependent types. — 2016.
[2] Cedric Fournet Nikhil Swamy Juan Chen Pierre-Evariste Dagand Pierre-Yves Strub Ben Livshits. Fully Abstract Compilation to JavaScript // ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL) 2013. — ACM, 2013. — P. 371-384. — URL: https://www.microsoft.com/en-us/research/ publication/fully-abstract-compilation-to-javascript/.
[3] Dierks T., Rescorla E. The Transport Layer Security (TLS) Protocol Version 1.2.— 2008. — URL: https://tools.ietf.org/html/rfc5246.
[4] F* Tutorial. — URL: https://www.fstar-lang.org/tutorial/.
[5] Gardner Philippa Anne, Maffeis Sergio, Smith Gareth David. Towards a Program Logic for JavaScript // Proceedings of the 39th Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. — POPL ’12. — ACM, 2012. — P. 31-44. - URL: http://doi.acm.org/10.1145/2103656.2103663.
[6] Goal question metric (gqm) approach / Rini Van Solingen, Vic Basili, Gianluigi Caldiera, H Dieter Rombach // Encyclopedia of software engineering. — 2002.
[7] Letouzey Pierre. Extraction in Coq: An Overview // Logic and Theory of Algorithms: 4th Conference on Computability in Europe, CiE 2008, Athens, Greece, June 15-20, 2008 Proceedings. — 2008. — P. 359-369. — URL: http://dx.doi.org/10.1007/ 978-3-540-69407-6_39.
[8] Nir Y. ChaCha20 and Poly1305 for IETF Protocols.- 2015.- URL: https:// tools.ietf.org/html/rfc7539.
[9] Абстрактное синтаксическое дерево программ на Flow.— URL: https:// github.com/facebook/flow/blob/master/src/parser/ast.ml.
[10] Компиляторы. Принципы, технологии и инструментарий / А.В. Ахо, М.С. Лам, Р. Сети, Д. Д. Ульман. — Вильямс, 2016.
[11] Плагин для преобразования export/import-стиля в exports/require-
стиль. — URL: https://www.npmjs.com/package/
babel-plugin-transform-flow-strip-types.
[12] Плагин для удаления типов в JavaScript-программе.— URL: https://www. npmjs.com/package/babel-plugin-transform-flow- strip-types.
[13] Платформа Node.js. — URL: https://nodejs.org/en/.
[14] Рейтинг топ-10 языков программирования, используемых в веб-разработке.—
URL: http://www.rswebsols.com/tutorials/programming/
top-10-programming-languages-web-development.
[15] Репозиторий проекта F*. — URL: https://github.com/FStarLang/FStar/.
[16] Репозиторий проекта HACL*.— URL: https://github.com/mitls/ hacl-star.
[17] Репозиторий проекта KreMLin.— URL: https://github.com/FStarLang/ kremlin.
[18] Репозиторий проекта js-chacha20.— URL: https://github.com/thesimj/ js-chacha20.
[19] Сайт криптографической библиотеки OpenSSL.— URL: https://www. openssl.org/.
[20] Сайт проекта Agda. — URL: http://wiki.portal.chalmers.se/agda/ pmwiki.php.
[21] Сайт проекта BuckleScript. — URL: https://bloomberg.github.io/ bucklescript/.
[22] Сайт проекта Coq. — URL: https://coq.inria.fr/.
[23] Сайт проекта Dafny. — URL: https://github.com/Microsoft/dafny.
[24] Сайт проекта Everest. — URL: https://project-everest.github.io/.
[25] Сайт проекта F*. — URL: https://www.fstar-lang.org/.
[26] Сайт проекта Flow. — URL: https://flow.org/en/.
[27] Сайт проекта Idris. — URL: http://www.idris-lang.org/.
[28] Сайт проекта Vale. — URL: https://github.com/project-everest/vale.
[29] Сайт проекта Web Assembly. — URL: http://webassembly.org/.
[30] Сайт проекта Z3. — URL: http://z3.codeplex.com/.
[31] Сайт проекта js_of_ocaml. — URL: http://ocsigen.org/js_of_ocaml/.
[32] Сайт проекта miTLS. — URL: https://mitls.org/.
[33] Спецификация языка ECMAScript 6.— URL: http://www.
ecma-international.org/publications/standards/Ecma-262.htm.
[34] Список языков программирования, которые транслируются в JavaScript. —
URL: https://github.com/jashkenas/coffeescript/wiki/
list-of-languages-that-compile-to-js.
[35] Сравнение инструмента Flow с языком TypeScript.— URL: http:// djcordhose.github.io/flow-vs-typescript/.

🛒 Оформить заказ

Работу высылаем в течении 5 минут после оплаты.

©2026 Cервис помощи студентам в выполнении работ