Аннотации

This commit is contained in:
2026-05-26 18:42:00 +03:00
parent c117ecd9b2
commit de571ed41d
9 changed files with 417 additions and 22 deletions

View File

@@ -1,9 +1,13 @@
#heading(numbering: none, outlined: true)[Список условных обозначений и сокращений] #import "common.typ": pz-front-heading, pz-table
#import "common.typ": pz-table #pz-front-heading[Обозначения и сокращения]
#set par(first-line-indent: 1.25cm, justify: true)
В настоящем документе применяются следующие обозначения и сокращения:
#pz-table( #pz-table(
[Условные обозначения и сокращения], [],
2, 2,
table.header([Обозначение], [Расшифровка]), table.header([Обозначение], [Расшифровка]),
[API], [Application Programming Interface программный интерфейс приложения], [API], [Application Programming Interface программный интерфейс приложения],

View File

@@ -1,9 +1,26 @@
#heading(numbering: none, outlined: true)[Abstract] #import "common.typ": pz-biblio-strip-en, pz-front-heading
#v(0.5em) #pagebreak(weak: true)
The thesis describes the Wallenc mobile application a client wallet for storing data on untrusted backends without a dedicated application server. Data is encrypted on the device before upload; decryption is performed only when the user enters a valid key. The work includes analysis of analogues, requirements, architecture and UI design, Kotlin implementation for Android, testing, and a brief economic assessment. #pz-biblio-strip-en(
udk: "004.738.5",
author: "Pytkov Roman Evgenievich",
title: "Development of the Wallenc mobile application — a universal wallet for secure storage of data on untrusted backends without a dedicated application server",
year: 2026,
)
The application uses MVVM and Clean Architecture. Main features are local and remote vault management, client-side AES encryption, Room metadata storage, and Yandex OAuth integration. #pz-front-heading(page-break: false)[Annotation]
Keywords: mobile application, client-side encryption, Android, vault, OAuth, Room. #{
set par(first-line-indent: 0pt, justify: true)
[The thesis describes the Wallenc mobile application a client wallet for storing data on untrusted backends without a dedicated application server. Data is encrypted on the device before upload; decryption is performed only when the user enters a valid key. The work includes analysis of analogues, requirements, architecture and UI design, Kotlin implementation for Android, testing, and a brief economic assessment.]
parbreak()
[The application uses MVVM and Clean Architecture. Main features are local and remote vault management, client-side AES encryption, Room metadata storage, and Yandex OAuth integration.]
parbreak()
[Keywords: mobile application, client-side encryption, Android, vault, OAuth, Room.]
}

View File

@@ -0,0 +1,20 @@
#import "common.typ": pz-biblio-strip-ru, pz-front-heading
#pz-biblio-strip-ru(
udk: "004.738.5",
author: "Пытков Роман Евгеньевич",
title: "Разработка мобильного приложения Wallenc — универсального кошелька для безопасного хранения данных на небезопасных хранилищах без собственного сервера",
year: 2026,
)
#pz-front-heading(page-break: false)[Аннотация]
#{
set par(first-line-indent: 1.25cm, justify: true)
[Пояснительная записка посвящена разработке мобильного приложения Wallenc клиентского кошелька для безопасного хранения данных на недоверенных хранилищах без собственного сервера приложения. Описаны анализ предметной области и аналогов, формирование требований, проектирование архитектуры и пользовательского интерфейса, программная реализация на Kotlin (Android, Jetpack Compose, Room, Hilt), тестирование и краткая экономическая оценка.]
parbreak()
[Реализованы управление локальными и удалёнными vault, клиентское AES-шифрование, OAuth Яндекс, служебное хранение метаданных в Room; спроектирован контур синхронизации без передачи ключей провайдеру. Исходный код размещён в приватном репозитории Gitea ЮФУ. Полный листинг исходных файлов приложение А; программная документация приложение Б.]
}

View File

@@ -0,0 +1,5 @@
// Заглушки под титул, ТЗ и резерв (3 стр.); удалить перед склейкой с внешним PDF.
#for _ in range(3) {
pagebreak(weak: true)
page(header: none, footer: none)[]
}

View File

@@ -5,6 +5,105 @@
#let pz-appendix-title(body) = heading(level: 1)[#body] #let pz-appendix-title(body) = heading(level: 1)[#body]
#let pz-sig-line(label) = box(
width: 5.5cm,
stroke: (bottom: 0.5pt),
inset: (bottom: 3pt),
)[#label]
// Без heading(level: 1): в gost перед ним всегда pagebreak (add-pagebreaks).
#let pz-front-heading(body, page-break: true) = {
if page-break {
pagebreak(weak: true)
}
align(center)[
#text(weight: "bold")[#upper(body)]
]
v(0.75em)
}
// Бланк аннотации: 2×2 без рамок; левый столбец — отступ, текст во 2-м (2 ячейки).
#let pz-dept-mop = "кафедра МОП ЭВМ"
#let pz-dept-sait = "кафедра системного анализа и телекоммуникаций"
#let pz-biblio-strip(head, tail) = {
table(
columns: (0.82fr, 1fr),
stroke: none,
inset: (x: 0pt, y: 5pt),
align: (left, left),
[], head,
[], tail,
)
v(0.65em)
}
#let pz-biblio-strip-ru(
udk: "",
author: "",
title: "",
direction: "09.03.04",
institute: "Южный федеральный университет",
faculty: "ИКТИБ",
department: pz-dept-mop,
year: 2026,
) = {
let pages = context counter(page).final().first()
pz-biblio-strip(
[
УДК #udk
#linebreak()
#upper(author)
#linebreak()
#quote[#title]
],
[
Квалификационная работа на степень
#linebreak()
«БАКАЛАВР» по направлению #direction
#linebreak()
#institute,
#linebreak()
#faculty, #department #year#sym.space.nobreak г.,
#linebreak()
#pages#sym.space.nobreak с.
],
)
}
#let pz-biblio-strip-en(
udk: "",
author: "",
title: "",
direction: "09.03.04",
institute: "Southern Federal University",
faculty: "ICTIS",
department: "the Department of Mathematical Support and Application of Computers (MOP EVM)",
year: 2026,
) = {
let pages = context counter(page).final().first()
pz-biblio-strip(
[
UDC #udk
#linebreak()
#upper(author)
#linebreak()
#quote[#title]
],
[
Qualification work for the degree of
#linebreak()
BACHELOR in the direction of #direction
#linebreak()
#institute,
#linebreak()
#faculty, #department #year,
#linebreak()
#pages#sym.space.nobreak p.
],
)
}
#let pz-column-count(columns) = if type(columns) == int { #let pz-column-count(columns) = if type(columns) == int {
columns columns
} else if type(columns) == array { } else if type(columns) == array {

View File

@@ -17,7 +17,7 @@
*Методы исследования*: анализ нормативной и технической документации, сравнительный анализ программных аналогов, объектно-ориентированное проектирование (UML, BPMN, DFD), прототипирование пользовательского интерфейса, программная реализация и тестирование @gost7322017 @kotlin-docs. *Методы исследования*: анализ нормативной и технической документации, сравнительный анализ программных аналогов, объектно-ориентированное проектирование (UML, BPMN, DFD), прототипирование пользовательского интерфейса, программная реализация и тестирование @gost7322017 @kotlin-docs.
*Практическая база.* Работа выполнена в рамках производственной практики в ООО НМФ «Нейротех» (09.02.202606.05.2026) по направлению 09.03.04 «Программная инженерия». Научный руководитель Беликов А. Н.; руководитель от организации Алексеев Д. М. *Практическая база.* Работа выполнена в рамках производственной практики в ООО НМФ «Нейротех» (09.02.202606.05.2026) по направлению 09.03.04 «Программная инженерия» на кафедре математического обеспечения и применения ЭВМ (МОП ЭВМ). Научный руководитель Беликов А. Н. (кафедра системного анализа и телекоммуникаций, САИТ); руководитель от организации Алексеев Д. М.
*Научная новизна* заключается в сочетании универсальной модели vault, клиентского шифрования и адаптерного доступа к разным типам хранилищ без собственного сервера приложения, с проектным контуром синхронизации зашифрованных данных без передачи ключей провайдеру. *Научная новизна* заключается в сочетании универсальной модели vault, клиентского шифрования и адаптерного доступа к разным типам хранилищ без собственного сервера приложения, с проектным контуром синхронизации зашифрованных данных без передачи ключей провайдеру.

View File

@@ -0,0 +1,136 @@
#import "common.typ": pz-sig-line
#pagebreak(weak: true)
// Строка ТЗ с линией на всю ширину (как бланк ВКР).
#let tz-row(body) = {
v(0.35em)
table(
columns: 1,
stroke: none,
inset: (x: 0pt, top: 1pt, bottom: 6pt),
align: left,
table.hline(stroke: 0.5pt + black),
[#body],
)
}
#let tz-row-split(left, right) = {
v(0.35em)
table(
columns: (1fr, auto),
stroke: none,
inset: (x: 0pt, top: 1pt, bottom: 6pt),
table.hline(stroke: 0.5pt + black),
[#left],
align(end)[#right],
)
}
#align(center)[
#set par(first-line-indent: 0pt, justify: false, leading: 1.15em)
#text(weight: "bold")[ТЕХНИЧЕСКОЕ ЗАДАНИЕ]
#text(weight: "bold")[НА ВЫПУСКНУЮ КВАЛИФИКАЦИОННУЮ РАБОТУ]
#v(0.5em)
БАКАЛАВРА по образовательной программе\
#quote[Методы и средства разработки программного обеспечения]\
направления 09.03.04 Программная инженерия
#v(0.35em)
студенту группы КТбо4-9\
Пыткову Роману Евгеньевичу
]
#v(0.5em)
#set par(first-line-indent: 0pt, justify: true, leading: 0.95em)
#tz-row[
1. Тема выпускной квалификационной работы: #quote[Разработка мобильного приложения Wallenc универсального кошелька для безопасного хранения данных на небезопасных хранилищах без собственного сервера] утверждена приказом по ВУЗу 2191-к от 17.02.2026 г.
]
#tz-row[2. Требования и исходные данные к работе:]
#tz-row[2.1 Среда разработки: Android Studio, Gradle, Git.]
#tz-row[2.2 ОС разработки: GNU/Linux / Windows 11.]
#tz-row[2.3 Язык программирования: Kotlin; целевая платформа Android (API 26+).]
#tz-row[2.4 Стек: Jetpack Compose, Coroutines/Flow, Hilt, Room, JUnit.]
#tz-row[3. Перечень подлежащих разработке вопросов (содержание работы):]
#tz-row[3.1 Введение]
#tz-row[3.2 Анализ требований и предметной области]
#tz-row[3.3 Проектирование архитектуры системы и пользовательского интерфейса]
#tz-row[3.4 Программная реализация]
#tz-row[3.5 Тестирование программного обеспечения]
#tz-row[3.6 Технико-экономическое обоснование разработки]
#tz-row[3.7 Заключение]
#tz-row[3.8 Список использованных источников]
#tz-row[3.9 Приложение А листинги исходного кода]
#tz-row[3.10 Приложение Б программная документация]
#tz-row[3.11 Приложение В скриншоты пользовательского интерфейса]
#tz-row[4. Перечень графического материала:]
#tz-row-split(
[4.1 Контекстная диаграмма и диаграммы требований],
[ 4 пл.],
)
#tz-row-split(
[4.2 Архитектура, DFD, UML, схема Room],
[ 6 пл.],
)
#tz-row-split(
[4.3 Пользовательские сценарии и экраны UI],
[ 12 пл.],
)
#tz-row-split(
[4.4 Диаграммы реализации и зависимостей модулей],
[ 4 пл.],
)
#tz-row-split(
[4.5 Материалы тестирования],
[ 6 пл.],
)
#tz-row[
5. Консультанты по выпускной квалификационной работе (с указанием разделов): не предусмотрены.
]
#tz-row[6. Срок сдачи законченной ВКР руководителю: «06» 05 2026 г.]
#tz-row[7. Дата выдачи задания: «09» 02 2026 г.]
#v(1.25em)
#align(left)[
#set par(first-line-indent: 0pt, justify: false, leading: 1.1em)
Руководитель образовательной программы\
заведующий кафедрой математического обеспечения и применения ЭВМ\
#v(0.5em)
#pz-sig-line[Беликов А. Н.]\
(подпись, дата)\
#v(0.75em)
Руководитель ВКР:\
старший преподаватель кафедры системного анализа и телекоммуникаций\
#v(0.5em)
#pz-sig-line[Беликов А. Н.]\
(подпись, дата)\
#v(0.75em)
Исполнитель:\
студент группы КТбо4-9\
#v(0.5em)
#pz-sig-line[Пытков Р. Е.]\
(подпись, дата)
]

View File

@@ -0,0 +1,120 @@
#import "common.typ": pz-sig-line
#let pz-title-page(
ministry: [],
university-full: [],
university-short: [],
institute: [],
department: [],
topic: [],
program: [],
direction: [],
student-name: [],
student-position: [],
supervisor-name: [],
supervisor-position: [],
norm-name: [],
norm-position: [],
dept-head-name: [],
dept-head-position: [],
city: [],
year: [],
) = {
set par(first-line-indent: 0pt, justify: false)
set align(center)
ministry
v(0.35em)
university-full
v(0.25em)
university-short
v(1.25em)
align(left)[
#set par(first-line-indent: 0pt)
#institute\
#department
]
v(0.75em)
grid(
columns: (1fr, 1fr),
gutter: 12pt,
align: (left, left),
[],
[
К защите допустить:\
#dept-head-position\
#v(0.6em)
#pz-sig-line(dept-head-name)\
#box(width: 5.5cm)[#year г.]
],
)
v(1.25em)
text(weight: "bold")[ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА]
v(0.75em)
[по образовательной программе\
#quote[#program]\
направления #direction Программная инженерия]
v(0.75em)
[на тему:]
v(0.35em)
text(weight: "bold")[#quote[#topic]]
v(1.25em)
align(left)[
#set par(first-line-indent: 0pt)
Руководитель ВКР:\
#supervisor-position\
#v(0.6em)
#pz-sig-line(supervisor-name)\
(подпись, дата)\
#v(0.75em)
Нормоконтроль:\
#norm-position\
#v(0.6em)
#pz-sig-line(norm-name)\
(подпись, дата)\
#v(0.75em)
Выполнил:\
#student-position\
#v(0.6em)
#pz-sig-line(student-name)\
(подпись, дата)
]
v(1fr)
[#city #year]
}
#pz-title-page(
ministry: [Министерство науки и высшего образования Российской Федерации],
university-full: [Федеральное государственное автономное образовательное учреждение высшего образования «Южный федеральный университет»],
university-short: [(ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ)],
institute: [Институт компьютерных технологий и информационной безопасности],
department: [Кафедра математического обеспечения и применения ЭВМ (МОП ЭВМ)],
topic: [Разработка мобильного приложения Wallenc универсального кошелька для безопасного хранения данных на небезопасных хранилищах без собственного сервера],
program: [Методы и средства разработки программного обеспечения],
direction: [09.03.04],
student-name: [Пытков Р. Е.],
student-position: [студент группы КТбо4-9],
supervisor-name: [Беликов А. Н.],
supervisor-position: [старший преподаватель кафедры системного анализа и телекоммуникаций],
norm-name: [Беликов А. Н.],
norm-position: [старший преподаватель кафедры системного анализа и телекоммуникаций],
dept-head-name: [Беликов А. Н.],
dept-head-position: [Зав. кафедрой системного анализа и телекоммуникаций],
city: [Таганрог],
year: [2026],
)

View File

@@ -1,4 +1,4 @@
#import "@preview/modern-g7-32:0.2.0": abstract, appendixes, enum-numbering, gost #import "@preview/modern-g7-32:0.2.0": appendixes, enum-numbering, gost
#set enum(numbering: enum-numbering) #set enum(numbering: enum-numbering)
#set heading(numbering: "1.1.1.1") #set heading(numbering: "1.1.1.1")
@@ -24,27 +24,22 @@
performers: ( performers: (
(name: "Пытков Р. Е.", position: "студент гр. КТбо4-9"), (name: "Пытков Р. Е.", position: "студент гр. КТбо4-9"),
), ),
hide-title: true,
) )
#set text(font: "Times New Roman") #set text(font: "Times New Roman")
#import "includes/common.typ": pz-appendix-title, pz-fig #import "includes/common.typ": pz-appendix-title, pz-fig
#abstract( #include "includes/blank-front-matter.typ"
"мобильное приложение", #include "includes/abstract-ru.typ"
"клиентское шифрование",
"Android",
"vault",
"zero-knowledge",
"синхронизация",
)[
Пояснительная записка посвящена разработке мобильного приложения Wallenc клиентского кошелька для безопасного хранения данных на недоверенных хранилищах без собственного сервера приложения. Описаны анализ предметной области и аналогов, формирование требований, проектирование архитектуры и пользовательского интерфейса, программная реализация на Kotlin (Android, Jetpack Compose, Room, Hilt), тестирование и краткая экономическая оценка. Реализованы управление локальными и удалёнными vault, клиентское AES-шифрование, OAuth Яндекс, служебное хранение метаданных в Room; спроектирован контур синхронизации без передачи ключей провайдеру. Исходный код размещён в приватном репозитории Gitea ЮФУ. Полный листинг исходных файлов приложение А; программная документация приложение Б.
]
#include "includes/abstract-en.typ" #include "includes/abstract-en.typ"
#set outline(indent: 1.25cm / 2)
#outline() #outline()
#include "includes/abbreviations.typ"
#include "includes/intro.typ" #include "includes/intro.typ"
#include "includes/ch01.typ" #include "includes/ch01.typ"
#include "includes/ch02.typ" #include "includes/ch02.typ"
@@ -53,7 +48,6 @@
#include "includes/ch05.typ" #include "includes/ch05.typ"
#include "includes/ch06.typ" #include "includes/ch06.typ"
#include "includes/conclusion.typ" #include "includes/conclusion.typ"
#include "includes/abbreviations.typ"
// Заголовок списка источников задаётся в gost (bibliography.title). // Заголовок списка источников задаётся в gost (bibliography.title).
#bibliography("references.bib") #bibliography("references.bib")