diff options
| author | Andrew Guschin <guschin.drew@gmail.com> | 2022-05-19 16:08:23 +0400 |
|---|---|---|
| committer | Andrew Guschin <guschin.drew@gmail.com> | 2022-05-19 16:08:23 +0400 |
| commit | ea3102c95848f7ee86dfe2081d4a711d37add7d3 (patch) | |
| tree | b1c2d2a4a18f4ab7cd19edec8396b1e3870b0cb9 | |
| parent | 9ee54e3e82e92669775eadabaa0c743d74482729 (diff) | |
Add latex report
| -rw-r--r-- | .gitignore | 14 | ||||
| -rw-r--r-- | http-client/go.sum | 77 | ||||
| -rw-r--r-- | http-server/go.sum | 2 | ||||
| -rw-r--r-- | report/SCWorks.cls | 908 | ||||
| -rw-r--r-- | report/coursework.pdf | bin | 0 -> 284022 bytes | |||
| -rw-r--r-- | report/coursework.tex | 498 | ||||
| -rw-r--r-- | report/images/screenshots/chat.png | bin | 0 -> 7921 bytes | |||
| -rw-r--r-- | report/images/screenshots/error.png | bin | 0 -> 19468 bytes | |||
| -rw-r--r-- | report/images/screenshots/input.png | bin | 0 -> 6554 bytes | |||
| -rw-r--r-- | report/images/screenshots/key.png | bin | 0 -> 31781 bytes | |||
| -rw-r--r-- | report/images/screenshots/register.png | bin | 0 -> 18721 bytes | |||
| -rw-r--r-- | report/images/screenshots/start.png | bin | 0 -> 10196 bytes | |||
| -rwxr-xr-x | report/merge.sh | 5 | ||||
| -rw-r--r-- | report/preamble.sty | 50 | ||||
| -rw-r--r-- | report/sources.bib | 29 | ||||
| -rw-r--r-- | report/title.pdf | bin | 0 -> 25350 bytes | |||
| -rw-r--r-- | report/titlepage.tex | 53 |
17 files changed, 1635 insertions, 1 deletions
@@ -1 +1,13 @@ -.idea
\ No newline at end of file +*.sqlite3 +.* +_minted* +*.aux +*.bbl +*.bcf +*.blg +*.fdb_latexmk +*.fls +*.log +*.xml +*.gz +*.toc
\ No newline at end of file diff --git a/http-client/go.sum b/http-client/go.sum new file mode 100644 index 0000000..d4331e2 --- /dev/null +++ b/http-client/go.sum @@ -0,0 +1,77 @@ +fyne.io/fyne/v2 v2.0.2 h1:6pDvFuCmL1odyT/fPI+2L54hMJW1Zt9Dno41HmLInRs= +fyne.io/fyne/v2 v2.0.2/go.mod h1:3+FYmLJVgeb8EvTPJ5YzZeo7LkAq4bbuY3Zrir6xHbg= +github.com/Kodeworks/golang-image-ico v0.0.0-20141118225523-73f0f4cfade9/go.mod h1:7uhhqiBaR4CpN0k9rMjOtjpcfGd6DG2m04zQxKnWQ0I= +github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fredbi/uri v0.0.0-20181227131451-3dcfdacbaaf3 h1:FDqhDm7pcsLhhWl1QtD8vlzI4mm59llRvNzrFg6/LAA= +github.com/fredbi/uri v0.0.0-20181227131451-3dcfdacbaaf3/go.mod h1:CzM2G82Q9BDUvMTGHnXf/6OExw/Dz2ivDj48nVg7Lg8= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fyne-io/mobile v0.1.3-0.20210318200029-09e9c4e13a8f h1:rguJ/t99j/6zRSFzsBKlsmmyl+vOvCeTJ+2uTBvuXFI= +github.com/fyne-io/mobile v0.1.3-0.20210318200029-09e9c4e13a8f/go.mod h1:/kOrWrZB6sasLbEy2JIvr4arEzQTXBTZGb3Y96yWbHY= +github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7 h1:SCYMcCJ89LjRGwEa0tRluNRiMjZHalQZrVrvTbPh+qw= +github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7/go.mod h1:482civXOzJJCPzJ4ZOX/pwvXBWSnzD4OKMdH4ClKGbk= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20210311203641-62640a716d48 h1:QrUfZrT8n72FUuiABt4tbu8PwDnOPAbnj3Mql1UhdRI= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20210311203641-62640a716d48/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/godbus/dbus/v5 v5.0.3 h1:ZqHaoEF7TBzh4jzPmqVhE/5A1z9of6orkAe5uHoAeME= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff h1:W71vTCKoxtdXgnm1ECDFkfQnpdqAO00zzGXLA5yaEX8= +github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff/go.mod h1:wfqRWLHRBsRgkp5dmbG56SA0DmVtwrF5N3oPdI8t+Aw= +github.com/jackmordaunt/icns v0.0.0-20181231085925-4f16af745526/go.mod h1:UQkeMHVoNcyXYq9otUupF7/h/2tmHlhrS2zw7ZVvUqc= +github.com/josephspurrier/goversioninfo v0.0.0-20200309025242-14b0ab84c6ca/go.mod h1:eJTEwMjXb7kZ633hO3Ln9mBUCOjX2+FlTljvpl9SYdE= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/lucor/goinfo v0.0.0-20200401173949-526b5363a13a/go.mod h1:ORP3/rB5IsulLEBwQZCJyyV6niqmI7P4EWSmkug+1Ng= +github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/srwiley/oksvg v0.0.0-20200311192757-870daf9aa564 h1:HunZiaEKNGVdhTRQOVpMmj5MQnGnv+e8uZNu3xFLgyM= +github.com/srwiley/oksvg v0.0.0-20200311192757-870daf9aa564/go.mod h1:afMbS0qvv1m5tfENCwnOdZGOF8RGR/FsZ7bvBxQGZG4= +github.com/srwiley/rasterx v0.0.0-20200120212402-85cb7272f5e9 h1:m59mIOBO4kfcNCEzJNy71UkeF4XIx2EVmL9KLwDQdmM= +github.com/srwiley/rasterx v0.0.0-20200120212402-85cb7272f5e9/go.mod h1:mvWM0+15UqyrFKqdRjY6LuAVJR0HOVhJlEgZ5JWtSWU= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8 h1:6WW6V3x1P/jokJBpRQYUJnMHRP6isStQwCozxnU7XQw= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200720211630-cb9d2d5c5666 h1:gVCS+QOncANNPlmlO1AhlU3oxs4V9z+gTtPwIk3p2N8= +golang.org/x/sys v0.0.0-20200720211630-cb9d2d5c5666/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190808195139-e713427fea3f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200328031815-3db5fc6bac03/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/http-server/go.sum b/http-server/go.sum new file mode 100644 index 0000000..96ff824 --- /dev/null +++ b/http-server/go.sum @@ -0,0 +1,2 @@ +github.com/mattn/go-sqlite3 v1.14.7 h1:fxWBnXkxfM6sRiuH3bqJ4CfzZojMOLVc0UTsTglEghA= +github.com/mattn/go-sqlite3 v1.14.7/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= diff --git a/report/SCWorks.cls b/report/SCWorks.cls new file mode 100644 index 0000000..7eddd54 --- /dev/null +++ b/report/SCWorks.cls @@ -0,0 +1,908 @@ +\LoadClass[14pt]{extarticle}
+%\RequirePackage[14pt]{extsizes}
+\RequirePackage[
+ a4paper, mag=1000,
+ left=2.5cm, right=1.5cm, top=2cm, bottom=2cm, bindingoffset=0cm,
+ headheight=0cm, footskip=1cm, headsep=0cm
+ ]{geometry}
+\RequirePackage{setspace}
+\RequirePackage{calc}
+\RequirePackage{titlesec}
+\RequirePackage{titletoc}
+\RequirePackage{caption}
+\RequirePackage{graphicx}
+\RequirePackage[inline]{enumitem}
+
+
+
+
+% --------------------------------------------------------------------------%
+% Input data
+% --------------------------------------------------------------------------%
+\def\chair#1{\gdef\@chair{#1}}\chair{\hbox to 3cm{\hrulefill}}
+\def\worktype#1{\gdef\@worktype{#1}}
+\def\worktitle{\@title}
+\def\typework#1{\gdef\@typework{#1}}
+\def\disserform#1{\gdef\@disserform{#1}}
+\def\disserformP#1{\gdef\@disserformP{#1}}
+\def\disserformR#1{\gdef\@disserformR{#1}}
+\def\disserformV#1{\gdef\@disserformV{#1}}
+\def\course#1{\gdef\@course{#1}}\course{2}
+\def\group#1{\gdef\@group{#1}}\group{211}
+\def\department#1{\gdef\@department{#1}}\department{\cyr\cyrf\cyra\cyrk%
+\cyru\cyrl\cyrsftsn\cyrt\cyre\cyrt\cyra\ \CYRK\CYRN\cyri\CYRI\CYRT}
+\def\otdelenie#1{\gdef\@otdelenie{#1}}
+\def\studentName{\@author}
+%\def\studentName#1{\gdef\@studentName{#1}}
+\def\satitle#1{\gdef\@satitle{#1}}\satitle{\hbox to 3cm{\hrulefill}}
+\def\saname#1{\gdef\@saname{#1}}\saname{\hbox to 3cm{\hrulefill}}
+\def\critictitle#1{\gdef\@critictitle{#1}}\critictitle{\hbox to 3cm{\hrulefill}}
+\def\criticname#1{\gdef\@criticname{#1}}\criticname{\hbox to 3cm{\hrulefill}}
+\def\secrname#1{\gdef\@secrname{#1}}\secrname{\hbox to 3cm{\hrulefill}}
+\def\chtitle#1{\gdef\@chtitle{#1}}\chtitle{\hbox to 3cm{\hrulefill}}
+\def\chname#1{\gdef\@chname{#1}}\chname{\hbox to 3cm{\hrulefill}}
+%\def\year#1{\gdef\@year{#1}}
+\def\spectype#1{\gdef\@spectype{#1}}
+\def\spectyperod#1{\gdef\@spectyperod{#1}}
+\def\workform#1{\gdef\@workform{#1}}
+\def\practtype#1{\gdef\@practtype{#1}}\practtype{\cyr\cyru\cyrch\cyre\cyrb%
+\cyrn\cyra\cyrya}
+\def\term#1{\gdef\@term{#1}}\term{2}
+\def\duration#1{\gdef\@duration{#1}}\duration{2}
+\def\protnum#1{\gdef\@protnum{#1}}\protnum{\hbox to 1cm{\hrulefill}}
+\def\protdate#1{\gdef\@protdate{#1}}\protdate{\hbox to 3cm{\hrulefill}}
+\def\practStart#1{\gdef\@practStart{#1}}\practStart{\hbox to 3cm{\hrulefill}}
+\def\practFinish#1{\gdef\@practFinish{#1}}\practFinish{\hbox to 3cm{\hrulefill}}
+\def\reviewtype#1{\gdef\@reviewtype{#1}}\reviewtype{\CYRO\CYRT%
+\CYRZ\CYRERY\CYRV}
+
+\def\patitle#1{\gdef\@patitle{#1}}\patitle{\@satitle}
+\def\paname#1{\gdef\@paname{#1}}\paname{\@saname}
+
+\def\napravlenie#1{\gdef\@napravlenie{#1}}\napravlenie{\hbox to 3cm{\hrulefill}}
+\def\Napravlenie{\@napravlenie}
+
+
+\def\studenttitle#1{\gdef\@studenttitle{#1}}\studenttitle{\cyr\cyrs\cyrt%
+\cyru\cyrd\cyre\cyrn\cyrt\cyra}
+\def\studentdone#1{\gdef\@studentdone{#1}}\studentdone{\cyrp\cyrr\cyro%
+\cyrsh\cyre\cyrd\cyrsh\cyre\cyrg\cyro}
+\def\studentfemale{\studenttitle{\cyrs\cyrt\cyru\cyrd\cyre\cyrn\cyrt%
+\cyrk\cyri}\studentdone{\cyrp\cyrr\cyro\cyrsh\cyre\cyrd\cyrsh%
+\cyre\cyrishrt}}
+
+%\newcommand{\MakeTitle}{}
+
+\def\workname#1{\gdef\@workname{#1}}
+
+%\hbox to 3cm{\hrulefill}
+
+% --------------------------------------------------------------------------%
+
+
+\newcommand{\signature}[2]{
+\hbox to 7cm{#1\hfill} \hbox to 3cm{\hrulefill} \hbox to 6cm{\hfill #2}}
+
+\newcommand{\inlinesignature}[2]{%
+#1\qquad \hbox to 3cm{\hrulefill}\quad #2}
+
+
+\newcommand{\signatureline}{}
+
+% --------------------------------------------------------------------------%
+\newcommand{\scaleUnivName}{0.97}
+
+\DeclareOption{times}{%
+ \renewcommand{\rmdefault}{ftm}
+ \renewcommand{\scaleUnivName}{1.0}
+}
+
+\DeclareOption{spec}{%
+ \spectype{\cyr\cyrs\cyrp\cyre\cyrc\cyri\cyra\cyrl\cyrsftsn\cyrn\cyro%
+ \cyrs\cyrt\cyri}
+ \spectyperod{\cyrs\cyrp\cyre\cyrc\cyri\cyra\cyrl\cyrsftsn\cyrn\cyro%
+ \cyrs\cyrt\cyri}
+ \workform{\cyr\CYRS\CYRP\CYRE\CYRC\CYRI\CYRA\CYRL\CYRI\CYRS\CYRT\CYRA}
+ \disserform{\CYRD\CYRI\CYRP\CYRL\CYRO\CYRM\CYRN\CYRA\CYRYA\ \CYRR\CYRA%
+ \CYRB\CYRO\CYRT\CYRA}
+ \disserformP{\CYRD\CYRI\CYRP\CYRL\CYRO\CYRM\CYRN\CYRO\CYRISHRT\ \CYRR%
+ \CYRA\CYRB\CYRO\CYRT\CYRE}
+ \disserformR{\CYRD\CYRI\CYRP\CYRL\CYRO\CYRM\CYRN\CYRO\CYRISHRT\ \CYRR%
+ \CYRA\CYRB\CYRO\CYRT\CYRERY}
+ \disserformV{\CYRD\CYRI\CYRP\CYRL\CYRO\CYRM\CYRN\CYRU\CYRYU\ \CYRR\CYRA%
+ \CYRB\CYRO\CYRT\CYRU}
+}
+
+\DeclareOption{bachelor}{%
+ \spectype{\cyr\cyrn\cyra\cyrp\cyrr\cyra\cyrv\cyrl\cyre\cyrn\cyri\cyrya}
+ \spectyperod{\cyr\cyrn\cyra\cyrp\cyrr\cyra\cyrv\cyrl\cyre\cyrn\cyri \cyryu}
+ \workform{\cyr\CYRB\CYRA\CYRK\CYRA\CYRL\CYRA\CYRV\CYRR\CYRA}
+ \disserform{\CYRB\CYRA\CYRK\CYRA\CYRL\CYRA\CYRV\CYRR\CYRS\CYRK\CYRA%
+ \CYRYA\ \CYRR\CYRA\CYRB\CYRO\CYRT\CYRA}
+ \disserformP{\CYRB\CYRA\CYRK\CYRA\CYRL\CYRA\CYRV\CYRR\CYRS\CYRK\CYRO%
+ \CYRISHRT\ \CYRR\CYRA\CYRB\CYRO\CYRT\CYRE}
+ \disserformR{\CYRB\CYRA\CYRK\CYRA\CYRL\CYRA\CYRV\CYRR\CYRS\CYRK\CYRO%
+ \CYRISHRT\ \CYRR\CYRA\CYRB\CYRO\CYRT\CYRERY}
+ \disserformV{\CYRB\CYRA\CYRK\CYRA\CYRL\CYRA\CYRV\CYRR\CYRS\CYRK\CYRU%
+ \CYRYU\ \CYRR\CYRA\CYRB\CYRO\CYRT\CYRU}
+}
+
+\DeclareOption{master}{%
+ \spectype{\cyr\cyrn\cyra\cyrp\cyrr\cyra\cyrv\cyrl\cyre\cyrn\cyri\cyrya}
+ \spectyperod{\cyr\cyrn\cyra\cyrp\cyrr\cyra\cyrv\cyrl\cyre\cyrn\cyri \cyryu}
+ \workform{\cyr\CYRM\CYRA\CYRG\CYRI\CYRS\CYRT\CYRR\CYRA}
+ \disserform{\CYRM\CYRA\CYRG\CYRI\CYRS\CYRT\CYRE\CYRR\CYRS\CYRK\CYRA%
+ \CYRYA\ \CYRR\CYRA\CYRB\CYRO\CYRT\CYRA}
+ \disserformP{\CYRM\CYRA\CYRG\CYRI\CYRS\CYRT\CYRE\CYRR\CYRS\CYRK\CYRO%
+ \CYRISHRT\ \CYRR\CYRA\CYRB\CYRO\CYRT\CYRE}
+ \disserformR{\CYRM\CYRA\CYRG\CYRI\CYRS\CYRT\CYRE\CYRR\CYRS\CYRK\CYRO%
+ \CYRISHRT\ \CYRR\CYRA\CYRB\CYRO\CYRT\CYRERY}
+ \disserformV{\CYRM\CYRA\CYRG\CYRI\CYRS\CYRT\CYRE\CYRR\CYRS\CYRK\CYRU%
+ \CYRYU\ \CYRR\CYRA\CYRB\CYRO\CYRT\CYRU}
+}
+
+\DeclareOption{coursework}{%
+ \worktype{\cyr\CYRK\cyru\cyrr\cyrs\cyro\cyrv\cyra\cyrya\ \cyrr\cyra\cyrb%
+ \cyro\cyrt\cyra}
+ \renewcommand{\maketitle}{\CDMakeTitle}
+ \workname{\MakeUppercase{\@worktype}}
+ \typework{\cyr\cyrn\cyra\cyrp\cyri\cyrs\cyra\cyrn\cyra}
+}
+
+\DeclareOption{diploma}{%
+ \worktype{\cyr\CYRV\cyrery\cyrp\cyru\cyrs\cyrk\cyrn\cyra\cyrya\ \cyrk\cyrv%
+ \cyra\cyrl\cyri\cyrf\cyri\cyrk\cyra\cyrc\cyri\cyro\cyrn\cyrn\cyra%
+ \cyrya\ \cyrr\cyra\cyrb\cyro\cyrt\cyra}
+ \worktype{\ \cyrr\cyra\cyrb\cyro\cyrt\cyra}
+ \renewcommand{\maketitle}{\CDMakeTitle}
+ \workname{\MakeUppercase{\@disserform}}
+ \typework{\cyr\cyrn\cyra\cyrp\cyri\cyrs\cyra\cyrn\cyra}
+}
+
+\DeclareOption{autoref}{%
+ \workname{\cyr\CYRA\CYRV\CYRT\CYRO\CYRR\CYRE\CYRF\CYRE\CYRR\CYRA\CYRT\ %
+ \MakeUppercase{\@disserformR}}
+ \worktype{\ \cyrr\cyra\cyrb\cyro\cyrt\cyra}
+ \renewcommand{\maketitle}{\CDMakeTitle}
+ %\workname{\MakeUppercase{\@disserform}}
+ \typework{\cyr\cyrn\cyra\cyrp\cyri\cyrs\cyra\cyrn\cyra}
+}
+
+\DeclareOption{nir}{%
+ \workname{\cyr\CYRO\CYRT\CYRCH\CYRE\CYRT\ \CYRO\ \CYRN\CYRA\CYRU\CYRCH%
+ \CYRN\CYRO-\CYRI\CYRS\CYRS\CYRL\CYRE\CYRD\CYRO\CYRV\CYRA\CYRT\CYRE\CYRL%
+ \CYRSFTSN\CYRS\CYRK\CYRO\CYRISHRT\ \CYRR\CYRA\CYRB\CYRO\CYRT\CYRE}
+ \worktype{\ \cyrr\cyra\cyrb\cyro\cyrt\cyra}
+ \renewcommand{\maketitle}{\CDMakeTitle}
+ %\workname{\MakeUppercase{\@disserform}}
+ \typework{\cyr\cyrn\cyra\cyrp\cyri\cyrs\cyra\cyrn\cyra}
+}
+
+\DeclareOption{pract}{%
+ \worktype{\cyr\CYRO\cyrt\cyrch\cyre\cyrt\ \cyro\ \cyrp\cyrr\cyra\cyrk\cyrt%
+ \cyri\cyrk\cyre}
+ \renewcommand{\maketitle}{\MakeTitlePr}
+ \typework{\cyr\cyrn\cyra\cyrp\cyri\cyrs\cyra\cyrn}
+}
+
+\DeclareOption{review}{%
+ \reviewtype{\CYRO\CYRT\CYRZ\CYRERY\CYRV}
+ \worktype{\cyrn\cyra\cyru\cyrch\cyrn\cyro\cyrg\cyro\ \cyrr\cyru\cyrk%
+ \cyro\cyrv\cyro\cyrd\cyri\cyrt\cyre\cyrl\cyrya\ \cyro\ \cyrv\cyrery%
+ \cyrp\cyru\cyrs\cyrk\cyrn\cyro\cyrishrt\ \cyrk\cyrv\cyra\cyrl\cyri\cyrf%
+ \cyri\cyrk\cyra\cyrc\cyri\cyro\cyrn\cyrn\cyro\cyrishrt\ \cyrr\cyra\cyrb%
+ \cyro\cyrt\cyre}
+ \workname{\cyr\cyrn\cyra\cyru\cyrch\cyrn\cyro\cyrg\cyro\ \cyrr\cyru\cyrk%
+ \cyro\cyrv\cyro\cyrd\cyri\cyrt\cyre\cyrl\cyrya\ \cyro\ \MakeLowercase{\@disserformP}}
+ %\workname{\@worktype\ \MakeLowercase{\@workform}}
+ \renewcommand{\maketitle}{\MakeTitleReview}
+ \renewcommand{\signatureline}{%
+ \par\noindent%
+ \CYRN\cyra\cyru\cyrch\cyrn\cyrery\cyrishrt\ \cyrr\cyru\cyrk\cyro\cyrv%
+ \cyro\cyrd\cyri\cyrt\cyre\cyrl\cyrsftsn\\%
+ \signature{\@satitle}{\@saname}\\%
+ }
+}
+
+\DeclareOption{assignment}{%
+ \reviewtype{\CYRZ\CYRA\CYRD\CYRA\CYRN\CYRI\CYRE}
+ \worktype{\cyrn\cyra\ \cyrv\cyrery\cyrp\cyru\cyrs\cyrk\cyrn\cyru%
+ \cyryu\ \cyrk\cyrv\cyra\cyrl\cyri\cyrf\cyri\cyrk\cyra\cyrc\cyri\cyro%
+ \cyrn\cyrn\cyru\cyryu\ \cyrr\cyra\cyrb\cyro\cyrt\cyru}
+ \workname{\cyr\cyrn\cyra\ \MakeLowercase{\@disserformV}}
+ %\workname{\@worktype\ \MakeLowercase{\@workform}}
+ \renewcommand{\maketitle}{\MakeTitleAssign}
+ \renewcommand{\signatureline}{%
+
+ \vfill%
+ \noindent%
+ \textbf{\CYRS\cyrr\cyro\cyrk\ \cyrp\cyrr\cyre\cyrd\cyro\cyrs\cyrt\cyra%
+ \cyrv\cyrl\cyre\cyrn\cyri\cyrya\ \cyrr\cyra\cyrb\cyro\cyrt\cyrery:}\ \@practFinish
+
+ \vspace{2em}\raggedright
+ \noindent \CYRR\cyra\cyrs\cyrs\cyrm\cyro\cyrt\cyrr\cyre\cyrn\cyro\ %
+ \cyrn\cyra\ \cyrz\cyra\cyrs\cyre\cyrd\cyra\cyrn\cyri\cyri\ \cyrk\cyra%
+ \cyrf\cyre\cyrd\cyrr\cyrery\ \@chair
+
+ \vspace{1em}
+ \CYRP\cyrr\cyro\cyrt\cyro\cyrk\cyro\cyrl\ \textnumero\ \@protnum\ \cyro%
+ \cyrt\ \@protdate
+
+ \vspace{1em}
+ \raggedright
+ \noindent
+ \inlinesignature{\CYRS\cyre\cyrk\cyrr\cyre\cyrt\cyra\cyrr\cyrsftsn}{\@secrname}
+
+ \vspace{2em}
+ \noindent\raggedright
+ \CYRD\cyra\cyrt\cyra\ \cyrv\cyrery\cyrd\cyra\cyrch\cyri\ \cyrz\cyra%
+ \cyrd\cyra\cyrn\cyri\cyrya\ \@practStart
+
+ \vspace{1em}
+ \noindent\raggedright
+ \inlinesignature{\CYRZ\cyra\cyrd\cyra\cyrn\cyri\cyre\ \cyrp\cyro\cyrl%
+ \cyru\cyrch\cyri\cyrl}{\hbox to 3cm{\hrulefill}}
+
+ \vspace{1cm}
+ }
+}
+
+\DeclareOption{critique}{%
+ \reviewtype{\CYRR\CYRE\CYRC\CYRE\CYRN\CYRZ\CYRI\CYRYA}
+ \worktype{\cyrn\cyra\ \cyrv\cyrery\cyrp\cyru\cyrs\cyrk\cyrn\cyru%
+ \cyryu\ \cyrk\cyrv\cyra\cyrl\cyri\cyrf\cyri\cyrk\cyra\cyrc\cyri\cyro%
+ \cyrn\cyrn\cyru\cyryu\ \cyrr\cyra\cyrb\cyro\cyrt\cyru}
+ \workname{\cyr\cyrn\cyra\ \MakeLowercase{\@disserformV}}
+ %\workname{\@worktype\ \MakeLowercase{\@workform}}
+ \renewcommand{\maketitle}{\MakeTitleReview}
+ \renewcommand{\signatureline}{%
+ \par\noindent%
+ \CYRR\cyre\cyrc\cyre\cyrn\cyrz\cyre\cyrn\cyrt\\%
+ \signature{\@critictitle}{\@criticname}\\%
+ }
+}
+
+
+\DeclareOption{referat}{%
+ \worktype{\cyr\CYRR\cyre\cyrf\cyre\cyrr\cyra\cyrt}
+ \workname{\MakeUppercase{\@worktype}}
+ \renewcommand{\maketitle}{\RefMakeTitle}
+ \typework{\cyr\cyrn\cyra\cyrp\cyri\cyrs\cyra\cyrn}
+}
+
+\DeclareOption{och}{%
+ \otdelenie{\cyr\cyro\cyrch\cyrn\cyro\cyrishrt\ \cyrf\cyro\cyrr\cyrm%
+ \cyrery\ \cyro\cyrb\cyru\cyrch\cyre\cyrn\cyri\cyrya}
+}
+
+\DeclareOption{zaoch}{%
+ \otdelenie{\cyr\cyrz\cyra\cyro\cyrch\cyrn\cyro\cyrishrt\ \cyrf\cyro\cyrr%
+ \cyrm\cyrery\ \cyro\cyrb\cyru\cyrch\cyre\cyrn\cyri\cyrya}
+}
+
+\ExecuteOptions{coursework,och,bachelor}
+\ProcessOptions
+
+% --------------------------------------------------------------------------%
+\newcommand*{\hm}[1]{#1\nobreak\discretionary{}%
+{\hbox{$\mathsurround=0pt #1$}}{}}
+% --------------------------------------------------------------------------%
+
+% --------------------------------------------------------------------------%
+
+\onehalfspacing
+\parindent=1.25cm
+\pagestyle{headings}
+\renewcommand{\@oddhead}{}
+\renewcommand{\@oddfoot}{\hfil \thepage}
+
+% --------------------------------------------------------------------------%
+% Table and figure numbering by sections
+% --------------------------------------------------------------------------%
+\newif\if@secNumbering\@secNumberingfalse
+\newcommand{\secNumbering}{
+ \renewcommand{\thefigure}{\arabic{section}.\arabic{figure}}
+ \renewcommand{\thetable}{\arabic{section}.\arabic{table}}
+ \renewcommand{\theequation}{\arabic{section}.\arabic{equation}}
+ \@addtoreset{figure}{section}
+ \@addtoreset{table}{section}
+ \@addtoreset{equation}{section}
+ \@secNumberingtrue
+}
+% --------------------------------------------------------------------------%
+
+% --------------------------------------------------------------------------%
+% Table and figure captions
+% --------------------------------------------------------------------------%
+\def\CaptionName#1{\gdef\@captionname{#1}}
+\newlength\tmp %10cm
+\setlength{\tmp}{1ex}
+\setlength{\belowcaptionskip}{1ex}
+\setlength{\abovecaptionskip}{1ex}
+
+\captionsetup[figure]{name=\CYRR\cyri\cyrs\cyru\cyrn\cyro\cyrk, labelsep=endash,
+ justification=centering, font={small}, skip=\abovecaptionskip, position=below}
+\captionsetup[table]{name=\CYRT\cyra\cyrb\cyrl\cyri\cyrc\cyra, labelsep=endash, format=plain,
+ justification=RaggedRight, singlelinecheck=false, font={small}, position=top}
+
+% --------------------------------------------------------------------------%
+% Table of contents
+% --------------------------------------------------------------------------%
+\renewcommand{\tableofcontents}%
+{\structformat\section*{\uppercase{\cyr\CYRS\CYRO\CYRD\CYRE\CYRR\CYRZH\CYRA%
+\CYRN\CYRI\CYRE}}\secformat\@starttoc{toc}
+\thispagestyle{empty}}
+
+\renewcommand{\@dotsep}{1.5}
+\renewcommand{\@pnumwidth}{1.0em}
+
+\newcommand{\l@abcd}[2]{{\@dottedtocline{0}{0pt}{0pt}{#1}{#2}}}
+
+\renewcommand{\l@section}{\@dottedtocline{1}{0em}{1.5em}}
+\renewcommand{\l@subsection}{\@dottedtocline{2}{1.5em}{2.3em}}
+% --------------------------------------------------------------------------%
+
+% --------------------------------------------------------------------------%
+% Sections, subsections
+% --------------------------------------------------------------------------%
+% Numbering
+\renewcommand{\thesection}{\arabic{section}}
+\renewcommand{\thesubsection}{\arabic{section}.\arabic{subsection}}
+\renewcommand{\thesubsubsection}{\arabic{section}.\arabic{subsection}.\arabic{subsubsection}}
+
+\newcommand{\sectionbreak}{\clearpage}
+
+% Contents, intro, conclusion
+\newcommand{\structformat}
+{
+ \titlespacing{\section}
+ {0cm}{3ex plus 1ex minus .2ex}{1.4ex plus.2ex}
+ \titleformat{\section}[block]
+ {\centering\bfseries}
+ {\thesection}{0ex}{}
+}
+
+% Sections, subsections
+\newcommand{\secformat}
+{
+ \titlespacing{\section}
+ {0cm}{3ex plus 1ex minus .2ex}{0.4ex plus.2ex}
+ \titleformat{\section}[block]
+ {\hspace{1.25cm}\raggedright\bfseries}
+ {\thesection}{1ex}{}
+}
+
+\newif\if@hyperrefloaded\@hyperrefloadedfalse
+\AtBeginDocument{\@ifpackageloaded{hyperref}%
+ {\@hyperrefloadedtrue}{\@hyperrefloadedfalse}%
+}
+
+%\RequirePackage{ifthen}
+\newcommand{\starsection}[1]{
+ \structformat
+ \section*{#1}%
+ \if@hyperrefloaded
+ \phantomsection
+ \fi
+ \addcontentsline{toc}{section}{#1}
+ \setcounter{section}{0}
+ \secformat
+}
+
+
+\setcounter{section}{0}
+\secformat
+
+
+\newcommand{\intro}{\starsection{\cyr\CYRV\CYRV\CYRE\CYRD\CYRE%
+\CYRN\CYRI\CYRE}}
+\newcommand{\abbreviations}{\starsection{\CYRO\CYRB\CYRO\CYRZ\CYRN\CYRA%
+\CYRCH\CYRE\CYRN\CYRI\CYRYA\ \CYRI\ \CYRS\CYRO\CYRK\CYRR\CYRA\CYRSHCH%
+\CYRE\CYRN\CYRI\CYRYA}}
+\newcommand{\definitions}{\starsection{\CYRO\CYRP\CYRR\CYRE\CYRD\CYRE%
+\CYRL\CYRE\CYRN\CYRI\CYRYA}}
+\newcommand{\defabbr}{\starsection{\CYRO\CYRP\CYRR\CYRE\CYRD\CYRE\CYRL%
+\CYRE\CYRN\CYRI\CYRYA, \CYRO\CYRB\CYRO\CYRZ\CYRN\CYRA\CYRCH\CYRE\CYRN%
+\CYRI\CYRYA\ \CYRI\ \CYRS\CYRO\CYRK\CYRR\CYRA\CYRSHCH\CYRE\CYRN\CYRI\CYRYA}}
+\newcommand{\conclusion}{\starsection{\cyr\CYRZ\CYRA\CYRK\CYRL\CYRYU%
+\CYRCH\CYRE\CYRN\CYRI\CYRE}}
+
+% Section and subsection parameters
+\titlespacing{\section}
+{0cm}{3ex plus 1ex minus .2ex}{0.4ex plus.2ex}
+
+\titleformat{\subsection}[block]
+{\hspace{1.25cm}\normalfont\bfseries}
+{\thesubsection}{1ex}{}
+\titlespacing{\subsection}
+{0cm}{2ex plus 1ex minus .2ex}{.4ex plus.2ex}
+
+\titleformat{\subsubsection}[block]
+{\hspace{1.25cm}\normalfont}
+{\thesubsubsection}{1ex}{}
+\titlespacing{\subsubsection}
+{0cm}{2ex plus 1ex minus .2ex}{.4ex plus.2ex}
+
+% --------------------------------------------------------------------------%
+
+% --------------------------------------------------------------------------%
+
+
+%\AddEnumerateCounter{\Asbuk}{\@Asbuk}{\CYRM}
+%\AddEnumerateCounter{\asbuk}{\@asbuk}{\cyrm}
+
+\makeatletter
+\def\redeflsection{\def\l@section{\@dottedtocline{1}{0em}{10em}}}
+\renewcommand{\appendix}{\par%
+
+ \renewcommand{\secNumbering}{
+ \renewcommand{\thefigure}{\Asbuk{section}.\arabic{figure}}
+ \renewcommand{\thetable}{\Asbuk{section}.\arabic{table}}
+ \renewcommand{\theequation}{\Asbuk{section}.\arabic{equation}}
+ \@addtoreset{figure}{section}
+ \@addtoreset{table}{section}
+ \@addtoreset{equation}{section}
+
+ }
+ \if@secNumbering
+ \secNumbering
+ \fi
+ \setcounter{section}{0}%
+ \setcounter{subsection}{0}%
+ \renewcommand{\appendixname}{\cyr\CYRP\CYRR\CYRI\CYRL\CYRO\CYRZH\CYRE%
+ \CYRN\CYRI\CYRE}%
+ \def\sectionname{\appendixname}%
+ \addtocontents{toc}{\protect\redeflsection}%
+ \gdef\thesection{\Asbuk{section}}%
+ \titlespacing{\section}
+ %{0cm}{1ex plus 0.1ex minus .2ex}{1.1ex plus.1ex}
+ {0cm}{3ex plus 1ex minus .2ex}{0.4ex plus.2ex}
+ \titleformat{\section}[display]
+ {\centering\normalfont\bfseries}
+ {\appendixname\hspace{1ex}\thesection}{0ex}{}
+
+
+ \titlecontents{section}
+ [3ex]
+ {\hspace{-3ex}}
+ {\appendixname~\thecontentslabel\hspace{2ex}}
+ {\hspace{2.3em}}
+ {\titlerule*[0.98ex]{.}\contentspage}
+
+}
+
+
+
+% --------------------------------------------------------------------------%
+% Title pages
+% --------------------------------------------------------------------------%
+%\newcommand{\shapka}{{\centering \CYRM\CYRI\CYRN\CYRO\CYRB\CYRR\CYRN\CYRA%
+%\CYRU\CYRK\CYRI\ \CYRR\CYRO\CYRS\CYRS\CYRI\CYRI\\ %
+%\CYRF\cyre\cyrd\cyre\cyrr\cyra\cyrl\cyrsftsn\cyrn\cyro\cyre\ \cyrg\cyro%
+%\cyrs\cyru\cyrd\cyra\cyrr\cyrs\cyrt\cyrv\cyre\cyrn\cyrn\cyro\cyre\ %
+%\cyrb\cyryu\cyrd\cyrzh\cyre\cyrt\cyrn\cyro\cyre\ \cyro\cyrb\cyrr\cyra%
+%\cyrz\cyro\cyrv\cyra\cyrt\cyre\cyrl\cyrsftsn\cyrn\cyro\cyre\ \cyru%
+%\cyrch\cyrr\cyre\cyrzh\cyrd\cyre\cyrn\cyri\cyre\ \cyrv\cyrery\cyrs%
+%\cyrsh\cyre\cyrg\cyro\ \cyro\cyrb\cyrr\cyra\cyrz%
+%\cyro\cyrv\cyra\cyrn\cyri\cyrya\\
+%\textbf{<<\CYRS\CYRA\CYRR\CYRA\CYRT\CYRO\CYRV\CYRS\CYRK\CYRI\CYRISHRT\ %
+%\CYRN\CYRA\CYRC\CYRI\CYRO\CYRN\CYRA\CYRL\CYRSFTSN\CYRN\CYRERY%
+%\CYRISHRT\ \CYRI\CYRS\CYRS\CYRL\CYRE\CYRD\CYRO\CYRV\CYRA\CYRT\CYRE\CYRL%
+%\CYRSFTSN\CYRS\CYRK\CYRI\CYRISHRT\ %
+%\CYRG\CYRO\CYRS\CYRU\CYRD\CYRA\CYRR\CYRS\CYRT\CYRV\CYRE\CYRN\CYRN\CYRERY%
+%\CYRISHRT\ \CYRU\CYRN\CYRI\CYRV\CYRE\CYRR\CYRS\CYRI\CYRT\CYRE\CYRT\ %
+%\CYRI\CYRM\CYRE\CYRN\CYRI~\CYRN.\,\CYRG.\,\CYRCH\CYRE\CYRR\CYRN\CYRERY%
+%\CYRSH\CYRE\CYRV\CYRS\CYRK\CYRO\CYRG\CYRO>>}\\}}
+
+%\newcommand{\shapka}{{\centering \CYRM\CYRI\CYRN\CYRO\CYRB\CYRR\CYRN\CYRA%
+%\CYRU\CYRK\CYRI\ \CYRR\CYRO\CYRS\CYRS\CYRI\CYRI\\ \hspace{-1em}%
+%\CYRF\cyre\cyrd\cyre\cyrr\cyra\cyrl\cyrsftsn\cyrn\cyro\cyre\ \cyrg\cyro%
+%\cyrs\cyru\cyrd\cyra\cyrr\cyrs\cyrt\cyrv\cyre\cyrn\cyrn\cyro\cyre\ %
+%\cyrb\cyryu\cyrd\cyrzh\cyre\cyrt\cyrn\cyro\cyre\ \cyro\cyrb\cyrr\cyra%
+%\cyrz\cyro\cyrv\cyra\cyrt\cyre\cyrl\cyrsftsn\cyrn\cyro\cyre\ \cyru%
+%\cyrch\cyrr\cyre\cyrzh\cyrd\cyre\cyrn\cyri\cyre\ \\\cyrv\cyrery\cyrs%
+%\cyrsh\cyre\cyrg\cyro\ \cyro\cyrb\cyrr\cyra\cyrz%
+%\cyro\cyrv\cyra\cyrn\cyri\cyrya\\\hspace{-2em}
+%{
+%\textbf{<<\CYRS\CYRA\CYRR\CYRA\CYRT\CYRO\CYRV\CYRS\CYRK\CYRI\CYRISHRT\ %
+%\CYRN\CYRA\CYRC\CYRI\CYRO\CYRN\CYRA\CYRL\CYRSFTSN\CYRN\CYRERY%
+%\CYRISHRT\ \CYRI\CYRS\CYRS\CYRL\CYRE\CYRD\CYRO\CYRV\CYRA\CYRT\CYRE\CYRL%
+%\CYRSFTSN\CYRS\CYRK\CYRI\CYRISHRT}} \\%
+%{\textbf{\CYRG\CYRO\CYRS\CYRU\CYRD\CYRA\CYRR\CYRS\CYRT\CYRV\CYRE\CYRN\CYRN\CYRERY%
+%\CYRISHRT\ \CYRU\CYRN\CYRI\CYRV\CYRE\CYRR\CYRS\CYRI\CYRT\CYRE\CYRT}} \\%
+%{\textbf{\CYRI\CYRM\CYRE\CYRN\CYRI~\CYRN.\,\CYRG.\,\CYRCH\CYRE\CYRR\CYRN\CYRERY%
+%\CYRSH\CYRE\CYRV\CYRS\CYRK\CYRO\CYRG\CYRO>>}}\\}}
+
+\newcommand{\shapka}{{\centering \CYRM\CYRI\CYRN\CYRO\CYRB\CYRR\CYRN\CYRA%
+\CYRU\CYRK\CYRI\ \CYRR\CYRO\CYRS\CYRS\CYRI\CYRI\\ %
+\CYRF\cyre\cyrd\cyre\cyrr\cyra\cyrl\cyrsftsn\cyrn\cyro\cyre\ \cyrg\cyro%
+\cyrs\cyru\cyrd\cyra\cyrr\cyrs\cyrt\cyrv\cyre\cyrn\cyrn\cyro\cyre\ %
+\cyrb\cyryu\cyrd\cyrzh\cyre\cyrt\cyrn\cyro\cyre\ \cyro\cyrb\cyrr\cyra%
+\cyrz\cyro\cyrv\cyra\cyrt\cyre\cyrl\cyrsftsn\cyrn\cyro\cyre\ \cyru%
+\cyrch\cyrr\cyre\cyrzh\cyrd\cyre\cyrn\cyri\cyre\ \\\cyrv\cyrery\cyrs%
+\cyrsh\cyre\cyrg\cyro\ \cyro\cyrb\cyrr\cyra\cyrz%
+\cyro\cyrv\cyra\cyrn\cyri\cyrya\\[0.2em]
+
+\centerline{\scalebox{\scaleUnivName}[1.0]{\parbox[t]{1.1\textwidth}
+{\centering
+\textbf{<<\CYRS\CYRA\CYRR\CYRA\CYRT\CYRO\CYRV\CYRS\CYRK\CYRI\CYRISHRT\ %
+\CYRN\CYRA\CYRC\CYRI\CYRO\CYRN\CYRA\CYRL\CYRSFTSN\CYRN\CYRERY%
+\CYRISHRT\ \CYRI\CYRS\CYRS\CYRL\CYRE\CYRD\CYRO\CYRV\CYRA\CYRT\CYRE\CYRL%
+\CYRSFTSN\CYRS\CYRK\CYRI\CYRISHRT\ \\%
+\CYRG\CYRO\CYRS\CYRU\CYRD\CYRA\CYRR\CYRS\CYRT\CYRV\CYRE\CYRN\CYRN\CYRERY%
+\CYRISHRT\ \CYRU\CYRN\CYRI\CYRV\CYRE\CYRR\CYRS\CYRI\CYRT\CYRE\CYRT\ \\%
+\CYRI\CYRM\CYRE\CYRN\CYRI~\CYRN.\,\CYRG.\,\CYRCH\CYRE\CYRR\CYRN\CYRERY%
+\CYRSH\CYRE\CYRV\CYRS\CYRK\CYRO\CYRG\CYRO>>}}}}}}
+
+\newcommand{\CDMakeTitle}
+{
+\thispagestyle{empty}
+\shapka
+%\vspace{0.5cm}
+\begin{center}
+%\parbox{8cm}{
+%\raggedright
+\CYRK\cyra\cyrf\cyre\cyrd\cyrr\cyra\ \@chair
+%}
+\end{center}
+
+\vspace{14pt}
+\vspace{1cm}
+{\centering
+\textbf{\MakeUppercase{\@title}}
+\\[0.3cm]
+{\@workname}
+
+}
+
+\vspace{1.5cm}
+\begin{flushleft}
+\@studenttitle\ \@course\ \cyrk\cyru\cyrr\cyrs\cyra\ \@group\ \cyrg%
+\cyrr\cyru\cyrp\cyrp\cyrery\\
+\@spectype\ \@napravlenie\\
+\@department\\
+\@author
+\end{flushleft}
+\vfill
+
+\noindent
+\CYRN\cyra\cyru\cyrch\cyrn\cyrery\cyrishrt\ \cyrr\cyru\cyrk\cyro\cyrv%
+\cyro\cyrd\cyri\cyrt\cyre\cyrl\cyrsftsn\\
+\signature{\@satitle}{\@saname}\\[14pt]
+\CYRZ\cyra\cyrv\cyre\cyrd\cyru\cyryu\cyrshch\cyri\cyrishrt\ \cyrk\cyra%
+\cyrf\cyre\cyrd\cyrr\cyro\cyrishrt\\
+\signature{\@chtitle}{\@chname}
+
+\vfill
+{\centering{\cyr\CYRS\cyra\cyrr\cyra\cyrt\cyro\cyrv\ \@date}
+
+}
+\newpage
+}
+% --------------------------------------------------------------------------%
+
+% --------------------------------------------------------------------------%
+% Title page of internship
+% --------------------------------------------------------------------------%
+\newcommand{\MakeTitlePr}
+{
+\thispagestyle{empty}
+\begin{center}
+\shapka
+\end{center}
+\vspace{0.5cm}
+
+
+\begin{flushright}
+ \parbox{7cm}{
+ \begin{flushleft}
+ \CYRU\CYRT\CYRV\CYRE\CYRR\CYRZH\CYRD\CYRA\CYRYU\\
+ \CYRZ\cyra\cyrv.\cyrk\cyra\cyrf\cyre\cyrd\cyrr\cyro\cyrishrt,\\
+ \@chtitle\\
+ \hbox to 7cm{\hrulefill\ \@chname}
+ \end{flushleft}
+ }
+\end{flushright}
+
+\vspace{1cm}
+\begin{center}\textbf{\MakeUppercase{\@worktype}}\end{center}
+\begin{flushleft}
+ \vspace{12pt}
+ \@studenttitle\ \@course\ \cyrk\cyru\cyrr\cyrs\cyra\ \@group\ \cyrg%
+ \cyrr\cyru\cyrp\cyrp\cyrery\ \@department\\
+ \@author
+ \vspace{0.5cm}
+
+
+ \cyrv\cyri\cyrd\ \cyrp\cyrr\cyra\cyrk\cyrt\cyri\cyrk\cyri: \@practtype\\
+ \cyrk\cyra\cyrf\cyre\cyrd\cyrr\cyra: \@chair\\
+ \cyrk\cyru\cyrr\cyrs: \@course\\
+ \cyrs\cyre\cyrm\cyre\cyrs\cyrt\cyrr: \@term\\
+ \cyrp\cyrr\cyro\cyrd\cyro\cyrl\cyrzh\cyri\cyrt\cyre\cyrl\cyrsftsn\cyrn%
+ \cyro\cyrs\cyrt\cyrsftsn: \@duration\ \cyrn\cyre\cyrd., \cyrs\ \@practStart\ \cyrg. \cyrp\cyro\ \@practFinish\ \cyrg.
+\end{flushleft}
+%\parindent=-0.2cm
+\vspace{1cm}
+
+\noindent
+\CYRR\cyru\cyrk\cyro\cyrv\cyro\cyrd\cyri\cyrt\cyre\cyrl\cyrsftsn\ \cyrp%
+\cyrr\cyra\cyrk\cyrt\cyri\cyrk\cyri\ \cyro\cyrt\ \cyru\cyrn\cyri\cyrv%
+\cyre\cyrr\cyrs\cyri\cyrt\cyre\cyrt\cyra,\\[12pt]%
+\signature{\@satitle}{\@saname}\\[14pt]
+\CYRR\cyru\cyrk\cyro\cyrv\cyro\cyrd\cyri\cyrt\cyre\cyrl\cyrsftsn\ \cyrp%
+\cyrr\cyra\cyrk\cyrt\cyri\cyrk\cyri\ \cyro\cyrt\ \cyro\cyrr\cyrg\cyra%
+\cyrn\cyri\cyrz\cyra\cyrc\cyri\cyri\ (\cyru\cyrch\cyrr\cyre\cyrzh\cyrd%
+\cyre\cyrn\cyri\cyrya, \cyrp\cyrr\cyre\cyrd\cyrp\cyrr\cyri\cyrya\cyrt%
+\cyri\cyrya),\\[12pt]%
+\signature{\@patitle}{\@paname}
+
+\newpage
+\thispagestyle{empty}
+\vspace*{11cm}
+\CYRT\cyre\cyrm\cyra\ \cyrp\cyrr\cyra\cyrk\cyrt\cyri\cyrk\cyri:<<\@title>>
+\parindent=1.25cm
+\newpage
+}
+% --------------------------------------------------------------------------%
+
+% --------------------------------------------------------------------------%
+% Title page of review
+% --------------------------------------------------------------------------%
+\newcommand{\MakeTitleReview}
+{
+\pagestyle{empty}
+\begin{center}
+\shapka
+\end{center}
+
+
+{
+\centering
+\textbf{\MakeUppercase{\@reviewtype}}\\[-0.3em]
+\textbf{\@workname}\\[0.3em]
+<<{\MakeUppercase{\@title}}>>
+
+\@studenttitle\ \@course\ \cyrk\cyru\cyrr\cyrs\cyra\ %
+\@department\\
+
+\centering
+{\@author}\\
+
+\centering
+\@studentdone\ \cyro\cyrb\cyru\cyrch\cyre\cyrn\cyri\cyre\ \cyrp%
+\cyro\ \@spectyperod\ \@napravlenie
+
+}
+\vspace{2em}
+}
+% --------------------------------------------------------------------------%
+
+
+% --------------------------------------------------------------------------%
+% Title page of assignment
+% --------------------------------------------------------------------------%
+\newcommand{\MakeTitleAssign}
+{
+\pagestyle{empty}
+\begin{center}
+\shapka
+\end{center}
+
+{
+\centering
+\CYRK\cyra\cyrf\cyre\cyrd\cyrr\cyra\ \@chair
+
+
+\vspace{6em}
+\centering
+\textbf{\MakeUppercase{\@reviewtype}\\%[-0.3em]
+\@workname}
+
+\vspace{0.3em}
+\raggedright
+\cyrp\cyro\ \@spectyperod\ \@napravlenie\\
+\@studenttitle\ \@course\ \cyrk\cyru\cyrr\cyrs\cyra\ %
+\@department\\
+\MakeUppercase{\@author}\\
+\textbf{\CYRT\cyre\cyrm\cyra\ \cyrr\cyra\cyrb\cyro\cyrt\cyrery:} <<{\MakeUppercase{\@title}}>>
+
+}
+
+\vfill
+
+\noindent
+\CYRN\cyra\cyru\cyrch\cyrn\cyrery\cyrishrt\ \cyrr\cyru\cyrk\cyro\cyrv%
+\cyro\cyrd\cyri\cyrt\cyre\cyrl\cyrsftsn\\
+\signature{\@satitle}{\@saname}\\[14pt]
+\CYRZ\cyra\cyrv\cyre\cyrd\cyru\cyryu\cyrshch\cyri\cyrishrt\ \cyrk\cyra%
+\cyrf\cyre\cyrd\cyrr\cyro\cyrishrt\\
+\signature{\@chtitle}{\@chname}
+
+\vfill
+{\centering{\cyr\CYRS\cyra\cyrr\cyra\cyrt\cyro\cyrv\ \@date}
+
+}
+\newpage
+\begin{center}\bf
+C\cyro\cyrd\cyre\cyrr\cyrzh\cyra\cyrn\cyri\cyre\ \cyrr\cyra\cyrb%
+\cyro\cyrt\cyrery
+\end{center}
+}
+% --------------------------------------------------------------------------%
+
+% --------------------------------------------------------------------------%
+% Referat title page
+% --------------------------------------------------------------------------%
+\newcommand{\RefMakeTitle}
+{
+\thispagestyle{empty}
+\shapka
+
+\vspace{3cm}
+{\centering
+\textbf{\MakeUppercase{\@title}}
+\\[0.3cm]
+{\@workname}
+
+}
+
+\vspace{1.5cm}
+\begin{flushleft}
+\@studenttitle\ \@course\ \cyrk\cyru\cyrr\cyrs\cyra\ \@group\ \cyrg%
+\cyrr\cyru\cyrp\cyrp\cyrery\\
+\@spectype\ \@napravlenie\\
+\@department\\
+\@author
+\end{flushleft}
+\vfill
+
+\noindent
+\CYRP\cyrr\cyro\cyrv\cyre\cyrr\cyre\cyrn\cyro:\\
+\signature{\@satitle}{\@saname}
+
+\vfill
+{\centering{\cyr\CYRS\cyra\cyrr\cyra\cyrt\cyro\cyrv\ \@date}
+
+}
+\newpage
+}
+% --------------------------------------------------------------------------%
+
+% --------------------------------------------------------------------------%
+% Last page
+% --------------------------------------------------------------------------%
+\newcommand{\lastpage}
+{
+\newpage
+\thispagestyle{empty}
+\vspace*{11cm}
+\@worktype\ <<\@title>>\ \@typework\ \cyrm\cyrn\cyro\cyrishrt\ %
+\cyrs\cyra\cyrm\cyro\cyrs\cyrt\cyro\cyrya\cyrt\cyre\cyrl\cyrsftsn\cyrn%
+\cyro, \cyri\ \cyrn\cyra\ \cyrv\cyrs\cyre\ \cyri\cyrs\cyrt\cyro\cyrch%
+\cyrn\cyri\cyrk\cyri, \cyri\cyrm\cyre\cyryu\cyrshch\cyri\cyre\cyrs%
+\cyrya\ \cyrv\ \cyrr\cyra\cyrb\cyro\cyrt\cyre, \cyrd\cyra\cyrn\cyrery\ %
+\cyrs\cyro\cyro\cyrt\cyrv\cyre\cyrs\cyrt\cyrv\cyru\cyryu\cyrshch\cyri%
+\cyre\ \cyrs\cyrs\cyrery\cyrl\cyrk\cyri.\par
+\parindent=9cm
+\parbox{8cm}{
+\begin{flushleft}
+\hbox to 6cm{\hbox to 3.5cm{\hrulefill}/\hbox to 3.5cm{\hrulefill}/}
+\end{flushleft}
+}
+}
+
+\AddEnumerateCounter{\Asbuk}{\@Asbuk}{\CYRM}
+\AddEnumerateCounter{\asbuk}{\@asbuk}{\cyrm}
+
+% --------------------------------------------------------------------------%
+% enumerations
+% --------------------------------------------------------------------------%
+\setlist{noitemsep}
+%\setlist[1]{labelindent=\parindent} % < Usually a good idea
+\setlist[itemize]{
+%leftmargin=52pt,
+rightmargin=0pt,
+labelsep=7pt,
+labelwidth=20pt,
+itemindent=0pt,
+listparindent=0pt,
+topsep=0pt,%4pt plus 2pt minus 4pt,
+partopsep=0pt,% plus 1pt minus 1pt,
+parsep=0pt,% plus 1pt,
+itemsep=0 pt%\parsep
+}
+\setlist[enumerate]{
+%leftmargin=52pt,
+rightmargin=0pt,
+labelsep=5pt,
+labelwidth=20pt,
+itemindent=0pt,
+listparindent=0pt,
+topsep=0pt,%4pt plus 2pt minus 4pt,
+partopsep=0pt,% plus 1pt minus 1pt,
+parsep=0pt,% plus 1pt,
+itemsep=0pt%\parsep
+}
+\setlist[itemize,1]{label={\normalfont\bfseries\textemdash}}
+%\setlist[enumerate]{labelsep=*, leftmargin=1.5pc}
+\setlist[enumerate,1]{label=\arabic*., ref=\arabic*}
+\setlist[enumerate,2]{label=\emph{\asbuk*}), ref=\theenumi.\emph{\asbuk*}}
+\setlist[enumerate,3]{label=\roman*., ref=\theenumii.\roman*}
+\setlist[enumerate,4]{label=\Asbuk*., ref=\theenumiii.\Asbuk*}
+%\setlist[description]{font=\sffamily\bfseries}
+
+%%%\renewcommand{\@listI}{%
+%%%\leftmargin=52pt
+%%%\rightmargin=0pt
+%%%\labelsep=7pt
+%%%\labelwidth=20pt
+%%%\itemindent=0pt
+%%%\listparindent=0pt
+%%%\topsep=4pt plus 2pt minus 4pt
+%%%\partopsep=0pt plus 1pt minus 1pt
+%%%\parsep=0pt plus 1pt
+%%%\itemsep=\parsep}
+
+%%%\renewcommand\theenumi {\@arabic\c@enumi}
+%%%\renewcommand\theenumii {\asbuk{enumii}}
+%%%\renewcommand\theenumiii{\@roman\c@enumiii}
+%%%\renewcommand\theenumiv {\Asbuk{enumiv}}
+%%%\newcommand\atheenumi{\asbuk{enumi}}
+%%%\newcommand\atheenumii{\asbuk{enumii}}
+%%%\renewcommand\labelenumi {\theenumi.}
+%%%\renewcommand\labelenumii {\theenumii.}
+%%%\renewcommand\labelenumiii{\theenumiii.}
+%%%\renewcommand\labelenumiv {\theenumiv.}
+%%%\renewcommand\p@enumii {\theenumi}
+%%%\renewcommand\p@enumiii {\theenumi.\theenumii}
+%%%\renewcommand\p@enumiv {\p@enumiii.\theenumiii}
+%%%\renewcommand\labelitemi {\normalfont\bfseries\textemdash}
+%%%\renewcommand\labelitemii {\normalfont\bfseries\textendash}
+%%%\renewcommand\labelitemiii{\textperiodcentered}
+%%%\renewcommand\labelitemiv {\textasteriskcentered}
+%%%
+%%%\renewcommand{\@listI}{%
+%%%\leftmargin=52pt
+%%%\rightmargin=0pt
+%%%\labelsep=7pt
+%%%\labelwidth=20pt
+%%%\itemindent=0pt
+%%%\listparindent=0pt
+%%%\topsep=4pt plus 2pt minus 4pt
+%%%\partopsep=0pt plus 1pt minus 1pt
+%%%\parsep=0pt plus 1pt
+%%%\itemsep=\parsep}
+% --------------------------------------------------------------------------%
+
+
+% --------------------------------------------------------------------------%
+% References
+% --------------------------------------------------------------------------%
+\makeatletter
+\def\@biblabel#1{#1 }
+
+\renewenvironment{thebibliography}[1]
+{
+ \starsection{\cyr\CYRS\CYRP\CYRI\CYRS\CYRO\CYRK\ \CYRI\CYRS\CYRP\CYRO\CYRL%
+ \CYRSFTSN\CYRZ\CYRO\CYRV\CYRA\CYRN\CYRN\CYRERY\CYRH\ \CYRI\CYRS\CYRT%
+ \CYRO\CYRCH\CYRN\CYRI\CYRK\CYRO\CYRV}
+ \list{\@biblabel{\@arabic\c@enumiv}}%
+ {\settowidth\labelwidth{\@biblabel{#1}}%
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \setlength{\itemsep}{0pt}
+ \@openbib@code
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty
+ \renewcommand\theenumiv{\@arabic\c@enumiv}}%
+ \sloppy
+ \clubpenalty4000
+ \@clubpenalty \clubpenalty
+ \widowpenalty4000%
+ \sfcode`\.\@m}
+{\def\@noitemerr
+ {\@latex@warning{Empty `thebibliography' environment}}%
+ \endlist}
+
+\makeatother
+% --------------------------------------------------------------------------%
diff --git a/report/coursework.pdf b/report/coursework.pdf Binary files differnew file mode 100644 index 0000000..e379155 --- /dev/null +++ b/report/coursework.pdf diff --git a/report/coursework.tex b/report/coursework.tex new file mode 100644 index 0000000..3821166 --- /dev/null +++ b/report/coursework.tex @@ -0,0 +1,498 @@ +\documentclass[spec, och, coursework]{SCWorks} +\usepackage{preamble} + + +\begin{document} +\include{titlepage.tex} +\tableofcontents + + +\intro +Для безопасного ведения корреспонденции в Интернете необходимы способы +подтверждения авторства того или иного пользователя для каждого сообщения. +Методы, используемые для реализации таких систем взаимодействия зачастую +намного более надёжные, чем системы общения с помощью физических бумажных +носителей. Такая надёжность достигается с помощью использования современных +криптографических протоколов, взлом которых является крайне неэффективной +задачей. + +Основной схемой подтверждения авторства какого-либо сообщения является +\textit{Электронная цифровая подпись}. При подписи сообщения по такой схеме +используется сразу несколько криптографических протоколов, обеспечивающих +надёжность подписи. + +Для реализации алгоритмов цифровой подписи обычно используется два +криптографических алгоритма: +\begin{itemize} + \item + Хэш-функции --- односторонние функции, которые однозначно преобразуют + сообщение произвольной длины в сообщение фиксированной длины; + \item + Системы с открытым ключом --- системы ассиметричного шифрования, + которые позволяют надёжно защитить электронную подпись от подделки. +\end{itemize} + +Системы, в которых используется какой-либо вид цифровой подписи способны +распознать любые попытки компрометации сообщений любого своего пользователя. + + +\section{Хэширование} +В основе алгоритмов цифровой подписи обычно используется какая-либо +односторонняя хэш-фунцкция в том или ином виде. + +Хэш-функция определена для сообщений любой длины, при этом в результате +получается хэш некоторой фиксированной длины. То есть $h = H(M)$, где +$H$ -- некоторая хэш-функция, $M$ -- некоторое сообщение, а $h$ -- хэш +сообщения, полученный с помощью функции $H$. При этом хэш-функции обладают +дополнительными свойствами, которые обеспечивают полезность таких функций +в крипографии: + +\begin{itemize} + \item Для данного $M$ легко вычислить $h$; + \item Для данного $h$ сложно вычислить такое $M$, что $H(M) = h$; + \item Для данного $M$ сложно найти другое такое $M'$, что $H(M) = H(M')$. +\end{itemize} + +На практике, для реализации односторонних хэш-функций используется идея функции +сжатия. В результате применения такой функции получается значение длины $n$, +меньшее длины $m$ исходного сообщения. В качестве параметров односторонняя +функция сжатия принимает часть сообщения и хэш-значение всех предыдущих блоков, +полученных по данному алгоритму. Таким образом хэш текущей части сообщения $M_i$ +вычисляется по формуле \[ h_i = f(M_i, h_{i - 1}) \]. + +Это значение становится одним из параметров для вычисления хэша для следующего +блока сообщения. Хэшем всего сообщения является хэш последнего блока. +\cite{scheiner-applied} + +Наиболее известными алгоритмами хэширования являются MD5 и SHA, разработанные +в 1991 и 1995 году соответственно. На данный момент оба алгоритма считаются +небезопасными для определённых целей, но на их примере можно рассмотреть +практическую реализацию и применение односторонних хэш-функций. + + +\subsection{MD5} +Алгоритм MD5 основан является улучшенной версией предшествующего алгоритма MD4. +Они cхожи по дизайну, хотя MD5 является несколько более сложным. Эти алгоритмы +обрабатывают данное сообщение блоким по 512 бит, которые в свою очередь +разбиты на 16 32-битных подблоков. В результате их исполнения в обоих случаях +получается хэш длины 128 бит, который получается конкатенацией четырёх +32-битных блоков. + +Перед применением непосредственно алгоритма хэширования MD5 предварительно +обрабатывает сообщение. Суть обработки состоит в том, что сообщение дополняется +так, что его длина была на 64 бита меньше числа, кратного 512. Дополнение +состоит из одного единичного бита, за которым следует необходимое количество +нулей. После этого в конце добавляется 64-битное представление длины сообщения +(до дополнения). Таким образом, в резултате получается сообщение, длина которого +кратна 512 битам. + +Следующим шагом будет установка начальных значений четырёх \textit{цепных +переменных}. Они получают следующие значения: +\begin{align*} + A &= \texttt{01234567}_{16} \\ + B &= \texttt{89abcdef}_{16} \\ + C &= \texttt{fedcba98}_{16} \\ + D &= \texttt{76542210}_{16} +\end{align*} + +Эти значения копируются в новые временные переменные $a = A$, $b = B$, $c = C$, +$d = D$. + +Алгоритм обрабатывает изначальное сообщения по циклам, при этом в каждом цикле +обрабатывается свой 512-битный блок. Каждый цикл разделён на 4 раунда, в каждом +из который используется своя нелинейная функция +\begin{align*} + F(x, y, z) &= (x \land y) \lor (\neg x \land z) \\ + G(x, y, z) &= (x \land z) \lor (\neg z \land y) \\ + H(x, y, z) &= x \oplus y \oplus z \\ + I(x, y, z) &= y \oplus (x \lor \neg z) +\end{align*} + +Для обработки $j$-го 32-битного подблока $M_j$ вводятся ещё четыре операции для +каждого из четырёх раундов: +\begin{align*} + FF(a, b, c, d, M_j, s, t_i) &= (a = b + ((a + F(b, c, d) + M_j + t_i) <<< s)) \\ + GG(a, b, c, d, M_j, s, t_i) &= (a = b + ((a + G(b, c, d) + M_j + t_i) <<< s)) \\ + HH(a, b, c, d, M_j, s, t_i) &= (a = b + ((a + H(b, c, d) + M_j + t_i) <<< s)) \\ + II(a, b, c, d, M_j, s, t_i) &= (a = b + ((a + I(b, c, d) + M_j + t_i) <<< s)) +\end{align*} + +Каждая итерация состоит из 64 шагов по 16 шагов на раунд. Для шагов +$i = \overline{1,64}$ константа $t_i = \left[2^{32} \cdot |\sin(i)|\right]$. +После выполнения всех шагов алгоритма, изменённые значения $a$, $b$, $c$, $d$ +прибавляются к $A$, $B$, $C$, $D$ и алгоритм повторяется для следующего блока +сообщения. Результат получается после выполнения алгоритма на последнем блоке и +конкатенации $A$, $B$, $C$ и $D$. + +Операции каждого раунда MD5 можно посмотреть в приложении $?$. +\cite{scheiner-applied} + + +\subsection{Secure Hash Algorithm} +Алгоритм хэширования SHA (или SHA-1) в общих чертах схож с алгоритмом MD4, +но в нём присутствуют дополнительные изменения, которые делают его более +криптостойким. +\begin{enumerate} + \item + Более длинная 160-битная длина хэша из-за использования пяти цепных + переменных вместо четырёх; + \item + В SHA используется 4 раунда, как и в MD5, но при этом в четвёртом + раунде используется такая же функция, как и во втором; + \item Количество шагов алгоритма увеличено с 64 до 80; + \item + Количество числовых констант уменьшено до четырёх, каждая из которых + является общей для одного из раундов алгоритма, вместо уникальной + константы для каждого шага алгоритма; + \item Изменён набор нелинейных функций. +\end{enumerate} + +Как и в MD5 первым шагом является установка начальных значений цепных +переменных: +\[ A = \texttt{67452301}_{16} \] +\[ B = \texttt{efcdab89}_{16} \] +\[ C = \texttt{98badcfe}_{16} \] +\[ D = \texttt{10325476}_{16} \] +\[ E = \texttt{c3d2e1f0}_{16} \] + +На каждой итерации алгоритма обрабатывается очередной блок исходного сообщения. +Значения цепных переменных копируются в новые переменные $a = A$, $b = B$, +$c = C$, $d = D$, $e = E$. + +Набор нелинейных функций у SHA следующий: +\begin{align*} + f_t(x, y, z) &= (x \land y) \lor (\neg x \land z), \, \text{для } t = \overline{0, 19} \\ + f_t(x, y, z) &= x \oplus y \oplus z, \, \text{для } t = \overline{20, 39} \\ + f_t(x, y, z) &= (x \land y) \lor (x \land z) \lor (y \land z), \, \text{для } t = \overline{40, 59} \\ + f_t(x, y, z) &= x \oplus y \oplus z, \, \text{для } t = \overline{60, 79} +\end{align*} + +Обрабатываемый блок сообщения преобразуется из 16 32-битных слов ($M_i, \, +i = \overline{0, 15}$) в 80 32-битных слов ($W_i, \, i = \overline{0, 79}$) +по следующему алгоритму: +\begin{align*} + W_t &= M_t, \, \text{для } t = \overline{0, 15} \\ + W_t &= (W_{t - 3} \oplus W_{t - 8} \oplus W_{t - 14} \oplus W_{t - 16}) <<< 1, \, \text{для } t = \overline{16, 79} +\end{align*} + +Для четырёх раундов используются следующие числовые константы: +\begin{align*} + K_t &= \left[\frac{\sqrt{2}}{4} \cdot 2^{32}\right] = \texttt{5a827999}_{16}, \, \text{для } t = \overline{0, 19} \\ + K_t &= \left[\frac{\sqrt{3}}{4} \cdot 2^{32}\right] = \texttt{6ed9eba1}_{16}, \, \text{для } t = \overline{20, 39} \\ + K_t &= \left[\frac{\sqrt{5}}{4} \cdot 2^{32}\right] = \texttt{8f1bbcdc}_{16}, \, \text{для } t = \overline{40, 59} \\ + K_t &= \left[\frac{\sqrt{10}}{4} \cdot 2^{32}\right] = \texttt{ca62c1d6}_{16}, \, \text{для } t = \overline{60, 79} \\ +\end{align*} + +Основной цикл алгоритма: +\begin{minted}{basic} + for t = 0 to 79 + tmp = (a <<< 5) + f_t(b, c, d) + e + W_t + K_t + e = d + d = c + c = b <<< 30 + b = a + a = tmp +\end{minted} + +Далее переменные $a$, $b$, $c$, $d$ и $e$ прибавляются к $A$, $B$, $C$, $D$ +и $E$ соответственно. Результатом всего алгоритма является конкатенация +$A$, $B$, $C$, $D$ и $E$ после выполнения его для всех блоков исходного +сообщения. + +\section{Ассиметричное шифрование} +В системах шифрования с открытым ключом (ассиметричных системах шифрования) +каждый из пользователей обладает некоторым ключом $k$, состоящим из +открытого ключа $k_o$, который определяет правило шифрования $E_k$, +и закрытого ключа $k_p$, который определяет правило расшифрования $D_k$. +Эти правила связаны соотношением +\[ E_k(M) = C, \, D_k(C) = M \] +где $M$ --- любой открытый текст, $C$ --- шифротекст. \cite{alferov} + +Для отправки конфиденциального сообщения от пользователя B пользователю A, +следует использовать следующий алгоритм: +\begin{enumerate} + \item Пользователь B запрашивает у пользователя A копию открытого ключа $k_o$; + \item Пользователь B вычисляет шифротекст $C = E_k(M)$ для своего сообщения $M$; + \item + Пользователь A получает шифротекст $C$ и расшифровывает его с помощью + своего закрытого ключа $k_p$, чтобы получить зашифрованное сообщение + $M = D_k(C)$. +\end{enumerate} + +Системы шифрования с открытым ключом осуществляют блочное шифрование, поэтому +текст исходного сообщения перед началом алгоритма шифрования разбивается на +блоки необходимого размера, которые затем последовательно преобразуются. +Ассиметричные системы обычно обеспечивают значительно меньшие скорости +шифрования, чем симметричные системы из-за чего из зачастую используют только +для передачи ключей пользователей, которые затем используются в симметричных +системах шифрования. + +\subsection{RSA} +Для обеспечения шифрования в алгоритме RSA используется факт того, что +имея два достаточно больших простых числа можно легко найти их произведение, +но имея произведение двух простых чисел нет простого способа найти его +разложение на множители \cite{encyclopedia}. Пусть $n = p \cdot q$ --- целое +число, представимое в виде произведения +двух больших простых числел $p$ и $q$. Выберем два числа $e$ и $d$ из условия +\[ e \cdot d \equiv 1 (\text{mod } \varphi(n)) \] +где $\varphi(n) = (p - 1) \cdot (q - 1)$ --- значение функции Эйлера от числа +$n$. + +Пусть $k = (n, p, q, e, d)$ --- некоторый выбранный ключ, который состоит из +открытого ключа $k_o = (n, e)$ и закрытого ключа $k_p = (n, p, q, d)$. +Тогда правила шифрования и расшифрования для некоторого сообщения $M$ и +шифротекста $C$ определяются следующими формулами: +\[ C = E_k(M) = M^e (\text{mod } n), \, D_k(C) = C^d (\text{mod } n) = M\] + +Нетрудно продемонстрировать, что сложность нахождения секретного ключа RSA +определяется сложностью факторизации числа $n$. Поэтому для создания ключа +следует использовать достаочно длинные простые числа, на которые также +можно наложить дополнительные требования для усложнения задачи: +\begin{enumerate} + \item + Числа $p$ и $q$ должны не слишком сильно отличаться друг от друга, но + и не быть слишком близкими друг к другу; + \item + Следует подобрать такие два таких числа, что наибольший общий делитель + чисел $p - 1$ и $q - 1$ был небольшим (желательно, равным 2); + \item + $p$ и $q$ должны быть сильно простыми числами, т. е. следующее + число имеет большой простой делитель и предыдущее число тоже имеет + такой большой простой делитель $s$, что $s - 1$ также обладает + достаточно большим простым делителем. +\end{enumerate} + +\section{Электронная цифровая подпись} +Цифровая подпись является некоторым числом, которое зависит от исходного +сообщения и некоторого закрытого ключа. С помощью цифровой подписи можно +решить три важных задачи при обмене сообщениями: +\begin{itemize} + \item аутентификация источника сообщения; + \item установление целостности сообщения; + \item обеспечение невозможности отказа от факта подписи конкретного сообщения. +\end{itemize} + +Надёжность схемы цифровой подписи определяется сложностью выполнения следующих +задач: +\begin{itemize} + \item + Подделка подписи (нахождение значения подписи под заданным + сообщением лицом, не являющимся владельцем секретного ключа); + \item + Создание подписанного сообщения (нахождения хотя бы одного сообщения + с правильным значением подписи); + \item Подмена сообщения (подбор двух различных сообщений с одинаковой подписью). +\end{itemize} + +Для создания цифровой подписи можно использовать алгоритмы шифрования с открытым +ключом, так как они обеспечивают невозможность подделки сообщения. Предположим, +что имеется некоторая пара преобразований $(E_k, D_k)$, где $E_k$ +зависит от открытого ключа $k_o$, а $D_k$ --- от закрытого $k_p$. Цифровую +подпись $S$ сообщения $M$ можно вычислить с помощью преобразования $D_k(M) = S$. +Таким образом, полученную подпись любой другой пользователь сможет проверить +с помощью известного ему преобразования $E_k(S) = M$ и получить исходное +сообщение. + +Проблема такого подхода заключается в том, что для такой системы подписи не +выполняется требование невозможности создания подписанного сообщения, +так как для любого $S_1$ любой пользователь может вычислить $M_1 = E_k(S_1)$ +и получить подписанное сообщение. + +Для решения этой проблемы зачастую в систему подписи также включается некоторая +хэш-функция $h$, которая перед подписью применяется к сообщению. +Но так как по хэшу сообщения невозможно восстановить само сообщение, подпись +должна отправляться вместе с сообщением. Создание подписи по такой схеме +удовлетворяет всем трём требованиям для надёжности цифровой подписи. +\cite{alferov} + +\subsection{Правовая сторона применения ЭЦП в России} +В российском Федеральном Законе \textnumero 63 электронные цифровые подписи +подразделяются на три вида: +\begin{enumerate} + \item + Простая электронная подпись --- подпись, которая с помощью определённых + криптографических протоколов позволяет подтвердить факт формирования + подписи определённым лицом; + \item + Неквалифицированная электронная подпись --- подпись, которая получена + в результате криптографического преобразования информации с + использованием ключа электронной подписи, позволяет определить лицо, + подписавшее электронный документ, позволяет обнаружить факт внесения + изменений в документ после его подписи; + \item + Квалифицированная электронная подпись --- подпись, которая соответствует + всем техническим признакам неквалифицированной электронной подписи, но + при этом также имеет ключ проверки электронной подписи в + квалифицированном сертификате, а также создана при помощи средств + электронной подписи, получивших подтверждение соответствия требованиям, + установленных в \textnumero 63-ФЗ. +\end{enumerate} + +Электронные документы считаются равнозначными документам на бумажном носителе, +подписанном собственноручной подписью, если они подписаны квалифицированной +электронной подписью и соответствуют остальным требованиям \textnumero 63-ФЗ. + +Таким образом, электронные цифровые подписи, применяемые в разнообразных +веб-приложениях для защиты от компрометации канала связи обычно не имеют +правовой силы на территории Российской Федерации. + + +\section{Разработка системы с применением ЭЦП} +В качестве системы, в которой необходимо применение электронной цифровой подписи +мною была выбрана система мгновенного обмена сообщениями (чат). Для разработки +данной системы я выбрал язык программирования Go, в стандартной библиотеке +которого присутствуют все криптографические функции, необходимые для реализации +данной системы. Для упрощения работы с чатом также были использованы две +сторонние библиотеки: +\begin{itemize} + \item + \textbf{fyne.io}, для создания пользовательского интерфейса клиентской + части системы; + \item Реализация драйвера базы данных \textbf{sqlite3} для языка Go. +\end{itemize} + +\subsection{Используемый алгоритм цифровой подписи} +В качестве алгоритма шифрования с открытым ключом используется RSA, в качестве +хэш-функции $h$ --- SHA-256, а также в процессе подписи к сообщению применяется +алгоритм Base64. + +Алгоритм подписи: +\begin{enumerate} + \item Генерируются открытый и закрытый ключи шифрования RSA; + \item Сообщение $M$ преобразуется с помощью алгоритма Base64 в $B_M$; + \item Вычисляется хэш $H_M = h(B_M)$; + \item Хэш зашифровывется с помощью ключа $k_o$: $C_M = E_k(H_M)$; + \item + Полученный шифротекст $C_M$ преобразуется в подпись $S_M$ с помощью + алгоритма Base64. +\end{enumerate} + +Для отправки сообщения $M$ на сервер к нему дополнительно приставляется +его подпись. Данные, отправляемые на сервер состоят из трёх частей, +конкатенируемых перед отправкой: +\begin{itemize} + \item Преобразованное с помощью алгоритма Base64 сообщение $M$; + \item Знак точки; + \item Цифровая подпись $S_M$. +\end{itemize} + +При получении сообщения от клиента, сервер проверяет его подпись. Алгоритм +проверки подписи: +\begin{enumerate} + \item Полученное сообщение разделяется на $B_M$ и $S_M$; + \item $S_M$ декодируются с помощью алгоритма Base64 в шифротекст $C_M$; + \item Вычисляется хэш $H_M = h(B_M)$; + \item Шифротекст $C_M$ расшифровывается с помощью ключа $h_p$ в сообщение $H_S$; + \item Подпись считается валидной в случае, если $H_S = H_M$. +\end{enumerate} + +\subsection{Реализация сервера приложения} +Сервер приложения принимает сетевые запросы по прикладному протоколу $HTTP$. +В сервере реализованы следующие точки входа: +\begin{itemize} + \item + \texttt{/api/register}: с помощью данной точки пользователь может внести + свой ключ проверки подписи в систему; + \item + \texttt{/api/sendMessage}: все сообщения, которые сервер должен сохранить + в своей базе данных и передать другим пользователям системы отправляются + на эту точку входа; + \item + \texttt{/api/pollMessages}: с помощью данной точки входа пользователь + способен запросить все сообщения, которые пришли на сервер после + некоторого момента времени (который пользователь указывает в запросе); + \item + \texttt{/api/getUserKey}: для проверки подписи пришедшего сообщения + на стороне клиента, пользователь может запросить ключ другого + пользователя, сохранённый на сервере; + \item + \texttt{/api/tryAuth}: данная точка входа не выполняет никаких действий, + и реализована для удобства проверки возможности аутентификации + пользователя на сервере (при удачной аутентификации данная точка + вернёт ответ со статусом HTTP 200, иначе, при провале аутентификации по + каким-либо причинам, статус будет не равен 200 и клиент может вывести + предупреждение пользователю). +\end{itemize} + +\subsection{Работа с клиентом приложения} +Для начала обмена сообщения с другими ползователями, подключенными к системе +необходимо в неё войти, либо зарегистрироваться. Вход возможен только при +наличии сгенерированного ключа для подписи, поэтому при первом запуске +следует нажать на кнопку <<Зарегистрироваться>> (рис. \ref{fig:start}). +\begin{figure}[H] + \centering + \includegraphics[width=0.7\textwidth]{screenshots/start.png} + \caption{Экран при запуске приложения} + \label{fig:start} +\end{figure} + +При регистрации (и входе) необходимо ввести URL сервера, к которому должен +присоединиться клиент и своё имя (рис. \ref{fig:register}). После этого +необходимо нажать на кнопку <<Сгенерировать ключи подписи>>. +\begin{figure}[H] + \centering + \includegraphics[width=0.7\textwidth]{screenshots/register.png} + \caption{Окно регистрации} + \label{fig:register} +\end{figure} + +Далее можно сохранить ключ в любом удобном месте с любым именем (рис. \ref{fig:key}). +\begin{figure}[H] + \centering + \includegraphics[width=0.7\textwidth]{screenshots/key.png} + \caption{Выбор места для сохранения ключа} + \label{fig:key} +\end{figure} + +После выбора места сохранения ключа необходимо нажать на кнопку +<<Зарегистрироваться>>, после чего клиент проверит возможность совершить +это действие с указанными данными. Если клиент не может соединиться с сервером, +либо на сервере уже зарегистрирован пользователь с таким именем, то клиент +выведет окно с ошибкой (рис. \ref{fig:error}). +\begin{figure}[H] + \centering + \includegraphics[width=0.7\textwidth]{screenshots/error.png} + \caption{Ошибка при регистрации} + \label{fig:error} +\end{figure} + +Если клиенту удалось соединиться с сервером и успешно пройти все проверки, то +для пользователя откроется окно чата, в котором можно написать своё сообщение +в поле снизу. Для отправки сообщения необходимо нажать на кнопку <<Отправить>> +(рис. \ref{fig:input}). +\begin{figure}[H] + \centering + \includegraphics[width=0.7\textwidth]{screenshots/input.png} + \caption{Ввод сообщения} + \label{fig:input} +\end{figure} + +Все сообщения, которые клиент смог получить от сервера отображаются в этом +окне чата (рис. \ref{fig:chat}). +\begin{figure}[H] + \centering + \includegraphics[width=0.7\textwidth]{screenshots/chat.png} + \caption{Окно чата с сообщением} + \label{fig:chat} +\end{figure} + + +\conclusion +Для реализации систем электронных цифровых подписей обычно используются +наиболее проверенные криптографически стойкие алгоритмы, которые способны +обеспечить защищённость от компрометации канала связи между пользователями. + +Благодаря таким алгоритмам имеется возможность установления безопасного +канала связи даже через Интернет, между людьми, которым сложно физически +обменяться ключами для проверки подписей. + +Но с увеличением мощности вычислительных компьютерных систем и разработкой +квантовых компьютеров некоторые криптографические протоколы находятся +под угрозой потери надёжности и безопасности. Поэтому можно ожидать появления +новых алгоритмов шифрования, хэширования и электронной цифровой подписи, +учитывающих новые разработки в сфере квантовых вычислений. + + +\printbibliography + +\end{document} diff --git a/report/images/screenshots/chat.png b/report/images/screenshots/chat.png Binary files differnew file mode 100644 index 0000000..64c1c44 --- /dev/null +++ b/report/images/screenshots/chat.png diff --git a/report/images/screenshots/error.png b/report/images/screenshots/error.png Binary files differnew file mode 100644 index 0000000..15cc0ef --- /dev/null +++ b/report/images/screenshots/error.png diff --git a/report/images/screenshots/input.png b/report/images/screenshots/input.png Binary files differnew file mode 100644 index 0000000..894c651 --- /dev/null +++ b/report/images/screenshots/input.png diff --git a/report/images/screenshots/key.png b/report/images/screenshots/key.png Binary files differnew file mode 100644 index 0000000..edef017 --- /dev/null +++ b/report/images/screenshots/key.png diff --git a/report/images/screenshots/register.png b/report/images/screenshots/register.png Binary files differnew file mode 100644 index 0000000..b13bed6 --- /dev/null +++ b/report/images/screenshots/register.png diff --git a/report/images/screenshots/start.png b/report/images/screenshots/start.png Binary files differnew file mode 100644 index 0000000..4c2ea10 --- /dev/null +++ b/report/images/screenshots/start.png diff --git a/report/merge.sh b/report/merge.sh new file mode 100755 index 0000000..bc4df1c --- /dev/null +++ b/report/merge.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +pdftk coursework.pdf cat 2-end output tmp.pdf +pdftk title.pdf tmp.pdf cat output course.pdf +rm tmp.pdf diff --git a/report/preamble.sty b/report/preamble.sty new file mode 100644 index 0000000..fdd4cb1 --- /dev/null +++ b/report/preamble.sty @@ -0,0 +1,50 @@ +\usepackage{subfigure} +\usepackage{tikz,pgfplots} +\pgfplotsset{compat=1.5} +\usepackage{float} +\setcounter{secnumdepth}{4} +\titleformat{\paragraph}[block] +{\hspace{1.25cm}\normalfont} +{\theparagraph}{1ex}{} +\titlespacing{\paragraph} +{0cm}{2ex plus 1ex minus .2ex}{.4ex plus.2ex} + +% --------------------------------------------------------------------------% + + +\usepackage[T2A]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage{graphicx} +\graphicspath{ {./images/} } +\usepackage{tempora} +\usepackage{minted} + +% \usepackage[sort,compress]{cite} +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{amsthm} +\usepackage{fancyvrb} +\usepackage{listings} +\usepackage{listingsutf8} +\usepackage{longtable} +\usepackage{array} +\usepackage[english,russian]{babel} +% \usepackage[colorlinks=false]{hyperref} +\usepackage{url} + +\usepackage[parentracker=true, + backend=biber, + hyperref=false, + language=russian, + autolang=other, + citestyle=gost-numeric, + defernumbers=true, + bibstyle=gost-numeric, +]{biblatex} +\addbibresource{sources.bib} +\usepackage{csquotes} + + +\newcommand{\eqdef}{\stackrel {\rm def}{=}} +\renewcommand\theFancyVerbLine{\small\arabic{FancyVerbLine}} +\newtheorem{lem}{Лемма}
\ No newline at end of file diff --git a/report/sources.bib b/report/sources.bib new file mode 100644 index 0000000..839fa27 --- /dev/null +++ b/report/sources.bib @@ -0,0 +1,29 @@ +@book{scheiner-applied, + author = {Bruce Schneier}, + title = {Applied Cryptography, Second Edition}, + publisher = {John Wiley \& Sons}, + year = {1996}, + isbn = {0-471-11709-9}, + language = {english}, + langid = {english}, +} + +@book{encyclopedia, + author = {Henk C.A.v. Tilborg}, + title = {Encyclopedia of Cryptography and Security}, + publisher = {Springer-Verlag New York}, + year = {2005}, + isbn = {978-0-387-23473-1}, + language = {english}, + langid = {english}, +} + +@book{alferov, + author = {А. П. Алферов}, + title = {Основы криптографии, 2-е издание}, + publisher = {Гелиос АРВ}, + year = {2002}, + isbn = {5-85438-025-0}, + language = {russian}, + langid = {russian}, +}
\ No newline at end of file diff --git a/report/title.pdf b/report/title.pdf Binary files differnew file mode 100644 index 0000000..801f0df --- /dev/null +++ b/report/title.pdf diff --git a/report/titlepage.tex b/report/titlepage.tex new file mode 100644 index 0000000..69d896e --- /dev/null +++ b/report/titlepage.tex @@ -0,0 +1,53 @@ +\selectlanguage{russian} +\chair{теоретических основ компьютерной безопасности и криптографии} +\title{Электронная цифровая подпись} +\course{2} +\group{231} +\department{факультета КНиИТ} +\napravlenie{10.05.01 "--- Компьютерная безопасность} + +% Для студентки. Для работы студента следующая команда не нужна. +% \studenttitle{Студентки} + +% Фамилия, имя, отчество в родительном падеже +\author{Гущина Андрея Юрьевича} + +% Заведующий кафедрой +\chtitle{д.ф.-м.н.} % степень, звание +\chname{М. Б. Абросимов} + +%Научный руководитель (для реферата преподаватель проверяющий работу) +\satitle{д.ф.-м.н.} %должность, степень, звание +\saname{М. Б. Абросимов} + +% Руководитель практики от организации (только для практики, +% для остальных типов работ не используется) +% \patitle{к.ф.-м.н.} +% \paname{С.~В.~Миронов} + +% Семестр (только для практики, для остальных +% типов работ не используется) +%\term{8} + +% Наименование практики (только для практики, для остальных +% типов работ не используется) +%\practtype{преддипломная} + +% Продолжительность практики (количество недель) (только для практики, +% для остальных типов работ не используется) +%\duration{4} + +% Даты начала и окончания практики (только для практики, для остальных +% типов работ не используется) +%\practStart{30.04.2019} +%\practFinish{27.05.2019} + +% Год выполнения отчета +\date{2021} + +\maketitle + +% Включение нумерации рисунков, формул и таблиц по разделам +% (по умолчанию - нумерация сквозная) +% (допускается оба вида нумерации) +% \secNumbering
\ No newline at end of file |