diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 0000000..804e358 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,23 @@ +name: build + +on: + push: + branches: + - master + pull_request: + branches: + - master + +jobs: + build: + runs-on: [ubuntu-latest] + steps: + - uses: actions/checkout@master + with: + ref: ${{ github.ref }} + - name: Build LaTeX + uses: xu-cheng/latex-action@v2 + with: + root_file: bake.tex + working_directory: spec/ + args: -jobname=bake -pdf -file-line-error -halt-on-error -interaction=nonstopmode diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml new file mode 100644 index 0000000..65114b6 --- /dev/null +++ b/.github/workflows/deploy.yaml @@ -0,0 +1,50 @@ +name: deploy + +on: + push: + tags: + - v* + +jobs: + build: + runs-on: [ubuntu-latest] + steps: + - uses: actions/checkout@master + - name: Build LaTeX + uses: xu-cheng/latex-action@v2 + with: + root_file: bake.tex + working_directory: spec/ + args: -jobname=bake -pdf -file-line-error -halt-on-error -interaction=nonstopmode + - name: Upload pdf + uses: actions/upload-artifact@v2 + with: + name: bake + path: spec/bake.pdf + deploy: + runs-on: [ubuntu-latest] + needs: [build] + steps: + - name: Download artifact + uses: actions/download-artifact@v2 + with: + name: bake + - name: Create release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: ${{ github.ref }} + draft: false + prerelease: false + - name: Upload pdf asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./bake.pdf + asset_name: bake.pdf + asset_content_type: application/pdf \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..52165dd --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ +# TeX files +*.aux +*.idx +*.log +*.out +*.thm +*.toc +*.dvi + +# Graphic files +*.eps +*.cdr + +# Tmp files +~*.* +*.bak +*.backup + +# Specific files +support +spec/*.pdf +clear.cmd \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..0e4185a --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# Bake: key establishment protocols based on elliptic curves + +![](figs/bake-logo-small.png) + +[![build](https://github.com/bcrypto/bake/actions/workflows/build.yaml/badge.svg)](https://github.com/bcrypto/bake/actions/workflows/build.yaml) + +## What is Bake? + +Bake is a series of key establishment protocols based on elliptic curves +and standardized in Belarus (STB 34.101.66). +The name "Bake" plays on the acronym of "Authenticated Key Establishment". + +## What is this repo? + +In this repo, we process comments on the current version of Bake, +discuss future versions, provide additional supporting material. + +The latest releases of Bake can be found at +[Releases](https://github.com/bcrypto/bake/releases). + +Comments and proposals are processed at +[Issues](https://github.com/bcrypto/bake/issues). + diff --git a/figs/bake-logo-small.png b/figs/bake-logo-small.png new file mode 100644 index 0000000..bc11270 Binary files /dev/null and b/figs/bake-logo-small.png differ diff --git a/figs/bake-logo.png b/figs/bake-logo.png new file mode 100644 index 0000000..ac3bd52 Binary files /dev/null and b/figs/bake-logo.png differ diff --git a/figs/stb.pdf b/figs/stb.pdf new file mode 100644 index 0000000..3ecba67 Binary files /dev/null and b/figs/stb.pdf differ diff --git a/spec/00Title.tex b/spec/00Title.tex new file mode 100644 index 0000000..7dd1f97 --- /dev/null +++ b/spec/00Title.tex @@ -0,0 +1,81 @@ +\thispagestyle{empty} + +\noindent +{\bf ГОСУДАРСТВЕННЫЙ СТАНДАРТ} \hfill {\bf\draftlogo}\\ +\noindent +{\bf РЕСПУБЛИКИ~БЕЛАРУСЬ}\\[-9pt] +\hrule height 1pt +\vskip0.4mm +\hrule height 2pt + +\vskip2cm +\noindent +{\bf\Large Информационные технологии и безопасность}\\[10pt] +{\bf\large ПРОТОКОЛЫ ФОРМИРОВАНИЯ ОБЩЕГО КЛЮЧА}\\ +{\bf\large НА ОСНОВЕ ЭЛЛИПТИЧЕСКИХ КРИВЫХ}\\ + +\vskip2cm +\noindent +{\bf\Large Iнфармацыйныя тэхналогii i бяспека}\\[10pt] +{\bf\large ПРАТАКОЛЫ ФАРМIРАВАННЯ АГУЛЬНАГА КЛЮЧА}\\ +{\bf\large НА АСНОВЕ ЭЛIПТЫЧНЫХ КРЫВЫХ} + +\noindent +%{\em Настоящий проект стандарта не подлежит применению до его утверждения} + +\vskip9cm +\hrule height 1pt +\vskip0.4mm +\hrule height 2pt +\noindent +\begin{tabular}{p{5cm}cp{4cm}} +\vtop{\null\hbox{{\includegraphics[width=2.6cm]{../figs/stb}}}} & \hspace{6cm} & +\mbox{}\newline\mbox{}\newline\newline Госстандарт\newline Минск\\ +\end{tabular} + +\pagebreak + +\hrule +\vskip2mm + +УДК~004.421.056.5(083.74)(476)\hfill +МКС~35.240.40\hfill +КП~05 + +\vskip0.5mm + +{\bf Ключевые слова}: криптографический протокол, формирование общего ключа, +аутентификация, криптографические алгоритмы на основе эллиптических кривых + +\vskip0.5mm + +\hrule + +\rule{0pt}{5mm} + +\centerline{\bf Предисловие} + +Цели, основные принципы, положения по государственному регулированию и +управлению в области технического нормирования и стандартизации +установлены Законом Республики Беларусь <<О техническом нормировании и +стандартизации>>. + +\vskip0.2cm + +1~РАЗРАБОТАН учреждением Белорусского государственного университета +<<Науч\-но-исследовательский институт прикладных проблем математики и +информатики>> + +ВНЕСЕН Оперативно-аналитическим центром при Президенте Республики Беларусь + +2~УТВЕРЖДЕН И ВВЕДЕН В ДЕЙСТВИЕ постановлением Госстандарта Республики +Беларусь от 22 мая 2014 г.~\No~23 + +3~ВВЕДЕН ВПЕРВЫЕ + +\vfill +\hrule +\vskip1mm +Издан на русском языке + +\pagebreak diff --git a/spec/01Logo.tex b/spec/01Logo.tex new file mode 100644 index 0000000..b319de9 --- /dev/null +++ b/spec/01Logo.tex @@ -0,0 +1,47 @@ +\newpage +\setcounter{page}{1} + +\begin{center} +{\bfseries +ГОСУДАРСТВЕННЫЙ СТАНДАРТ РЕСПУБЛИКИ~БЕЛАРУСЬ +\vskip 2pt +\hrule width\textwidth + +\vskip 9pt + +Информационные технологии и безопасность + +ПРОТОКОЛЫ ФОРМИРОВАНИЯ ОБЩЕГО КЛЮЧА +НА ОСНОВЕ ЭЛЛИПТИЧЕСКИХ КРИВЫХ + +\vskip 9pt + +Iнфармацыйныя тэхналогii i бяспека + +ПРАТАКОЛЫ ФАРМIРАВАННЯ АГУЛЬНАГА КЛЮЧА +НА АСНОВЕ ЭЛIПТЫЧНЫХ КРЫВЫХ +} % bfseries + +\vskip 9pt + +Information technology and security + +Key establishment protocols based on elliptic curves + +\vskip 4pt +\hrule width \textwidth +\end{center} + +\mbox{}\hfill{\bfseries Дата введения 2014-09-01} + +\chapter{Область применения} + +Настоящий стандарт устанавливает протоколы~BMQV, BSTS и~BPACE, +которые позволяют сторонам-участникам сформировать общий секретный ключ. +% +С помощью общего ключа стороны могут выполнять аутентификацию, +шифрование, имитозащиту, другие криптографические операции. + +Настоящий стандарт применяется при разработке средств криптографической +защиты информации, в том числе средств аутентификации и шифрования. + diff --git a/spec/02Refs.tex b/spec/02Refs.tex new file mode 100644 index 0000000..1f0cf57 --- /dev/null +++ b/spec/02Refs.tex @@ -0,0 +1,37 @@ +\chapter{Нормативные ссылки} + +В настоящем cтандарте использованы ссылки на следующие +технические нормативные правовые акты в области +технического нормирования и стандартизации (далее~--- ТНПА): + +СТБ~34.101.17-2012 Информационные технологии и безопасность. +Синтаксис запроса на получение сертификата + +СТБ~34.101.19-2012 Информационные технологии. +Форматы сертификатов и списков отозванных сертификатов +инфраструктуры открытых ключей + +СТБ~34.101.31-2011 Информационные технологии. Защита информации. +Криптографические алгоритмы шифрования и контроля целостности + +СТБ~34.101.45-2013 Информационные технологии и безопасность. +Алгоритмы электронной цифровой подписи и транспорта ключа на основе +эллиптических кривых + +СТБ~34.101.47-2012 Информационные технологии и безопасность. +Криптографические алгоритмы генерации псевдослучайных чисел + +ГОСТ~34.973-91 (ИСО 8824-87) Информационная технология. Взаимосвязь +открытых систем. Спецификация абстрактно-синтаксической нотации +версии 1 (АСН.1) + +\begin{note*} +При пользовании настоящим стандартом целесообразно проверить действие ТНПА по +каталогу, составленному по состоянию на 1 января текущего года, и по +соответствующим информационным указателям, опубликованным в текущем году. + +Если ссылочные ТНПА заменены (изменены), то при пользовании настоящим стандартом +следует руководствоваться замененными (измененными) ТНПА. Если ссылочные ТНПА +отменены без замены, то положение, в котором дана ссылка на них, применяется в +части, не затрагивающей эту ссылку. +\end{note*} diff --git a/spec/03Terms.tex b/spec/03Terms.tex new file mode 100644 index 0000000..8d6a478 --- /dev/null +++ b/spec/03Terms.tex @@ -0,0 +1,144 @@ +\chapter{Термины и определения} + +В настоящем стандарте применяют +следующие термины с соответствующими определениями: + +{\bf \thedefctr~аутентификация}: +Проверка подлинности стороны. + +{\bf \thedefctr~долговременный ключ}: +Ключ, который используется в нескольких сеансах протокола. + +{\bf \thedefctr~зашифрование}: +Преобразование сообщения, +направленное на обеспечение его конфиденциальности, +которое выполняется с использованием секретного ключа. + +{\bf \thedefctr~имитовставка}: +Контрольная характеристика сообщения, +которая определяется с использованием секретного ключа +и служит для контроля целостности и подлинности сообщения. + +{\bf \thedefctr~имитозащита}: +Контроль целостности и подлинности сообщений, +который реализуется путем выработки и проверки имитовставок. + +{\bf \thedefctr~ключ}: +Параметр, который управляет криптографическими +операциями зашифрования и расшифрования, +имитозащиты, выработки и проверки ЭЦП, +формирования общего ключа и др. + +{\bf \thedefctr~конфиденциальность}: +Гарантия того, что сообщения доступны для использования +только тем сторонам, которым они предназначены. + +{\bf \thedefctr~личный ключ:} +Ключ, который связан с конкретной стороной, не является общедоступным и +используется в настоящем стандарте для формирования общего ключа и для выработки +электронной цифровой подписи. + +%{\bf \thedefctr~общий ключ}: +%Секретный ключ, +%распределенный между сторонами в результате +%формирования общего ключа. + +{\bf \thedefctr~одноразовый ключ}: +Ключ, который создается, используется и уничтожается в течение одного +сеанса протокола. + +{\bf \thedefctr~октет}: +Двоичное слово длины~$8$. + +{\bf \thedefctr~открытый ключ:} +Ключ, который строится по личному ключу, связан с конкретной стороной, +может быть сделан общедоступным и используется в настоящем стандарте +для формирования общего ключа и для проверки +электронной цифровой подписи. + +{\bf \thedefctr~пароль}: +Секрет, который способен запомнить человек и +который поэтому может принимать сравнительно небольшое +число значений. + +%This part of ISO/IEC 11770 defines key establishment mechanisms +%based on weak secrets, i.e., secrets that +%can be readily memorized by a human, and hence secrets that +%will be chosen from a relatively small set of +%possibilities. + +%secret that can be conveniently memorized by a human being; +%typically this means that the entropy of the +%secret is limited, so that an exhaustive search +%for the secret may be feasible, given knowledge that would +%enable a correct guess for the secret to be +%distinguished from an incorrect guess + +{\bf \thedefctr~подлинность}: +Гарантия того, что сторона действительно та, за кого себя выдает; гарантия того, +что сторона действительно является владельцем (создателем, отправителем) +определенного сообщения. + +{\bf \thedefctr~подтверждение ключа}: +Проверка того, что сформированый стороной общий ключ корректен. + +{\bf \thedefctr~построение ключа}: +Создание ключа по общим секретным и дополнительным открытым данным, завершающая +стадия формирования общего ключа. + +{\bf \thedefctr~протокол}: +Интерактивный криптографический алгоритм, который выполняют несколько +сторон-участников, обмениваясь между собой сообщениями, содержащими +промежуточные результаты вычислений. + +{\bf \thedefctr~расшифрование}: +Преобразование, обратное зашифрованию. + +{\bf \thedefctr~сеанс протокола}: +Конкретная реализация (прогон) протокола. + +{\bf \thedefctr~секретный ключ}: +Ключ, который связан с конкретными сторонами, +не является общедоступным и используется в настоящем стандарте +для шифрования, имитозащиты, формирования общего ключа, +генерации псевдослучайных чисел. + +{\bf \thedefctr~сертификат}: +Структурированные данные, связывающие +идентификатор стороны с ее долговременным открытым ключом. + +{\bf \thedefctr~синхропосылка}: +Открытые входные данные криптографического алгоритма, +которые обеспечивают уникальность результатов +криптографического преобразования на фиксированном ключе. + +{\bf \thedefctr~сообщение}: +Двоичное слово конечной длины. + +{\bf \thedefctr~формирование общего ключа}: +Процедура, в результате которой несколько сторон +определяют один и тот же ключ, известный только им. + +{\bf \thedefctr~хэш-значение}: +Двоичное слово фиксированной длины, +которое определяется по сообщению без использования ключа и +служит для контроля целостности сообщения и для представления +сообщения в (необратимо) сжатой форме. + +{\bf \thedefctr~хэширование}: +Выработка хэш-значений. + +{\bf \thedefctr~целостность}: +Гарантия того, что сообщение не изменено +при хранении или передаче. + +{\bf \thedefctr~шифрование}: +Зашифрование или расшифрование. + +{\bf \thedefctr~электронная цифровая подпись; ЭЦП}: +Контрольная характеристика сообщения, +которая вырабатывается с использованием личного ключа, +проверяется с использованием открытого ключа, +служит для контроля целостности и подлинности сообщения +и обеспечивает невозможность отказа от авторства. + diff --git a/spec/04Defs.tex b/spec/04Defs.tex new file mode 100644 index 0000000..e0701ba --- /dev/null +++ b/spec/04Defs.tex @@ -0,0 +1,335 @@ +\chapter{Обозначения}\label{DEFS} + +\section{Список обозначений} + +{\tabcolsep 0pt +\begin{longtable}{lrp{13.5cm}} +$\{0,1\}^n$ & \hspace{2mm} & +множество всех слов длины $n$ в алфавите~$\{0,1\}$; +\\[4pt] +$\{0,1\}^*$ && +множество всех слов конечной длины в алфавите~$\{0,1\}$ +(включая пустое слово длины $0$); +\\[4pt] +$|u|$ && +длина слова $u\in\{0,1\}^*$; +\\[4pt] +% +$\{0,1\}^{n*}$ && +множество всех слов из~$\{0,1\}^*$, +длина которых кратна~$n$; +\\[4pt] +% +$\alpha^n$ && +для~$\alpha\in\{0,1\}$ слово длины $n$ из одинаковых символов $\alpha$; +\\[4pt] +% +% +$\left\langle u\right\rangle_n$ && +для $u\in\{0,1\}^*$ +слово из первых~$n$ символов~$u$, $n\leq|u|$; +\\[4pt] +% +$u\parallel v$ && +конкатенация +$u_1 u_2\ldots u_n v_1 v_2\ldots v_m$ +слов +$u=u_1 u_2\ldots u_n$ и +$v=v_1 v_2\ldots v_m$; +\\[4pt] +% +$\texttt{01234\ldots}_{16}$ && +представление $u\in\{0,1\}^{4*}$ шестнадцатеричным словом, +при котором последовательным четырем символам~$u$ соответствует +один шестнадцатеричный символ +(например, $10100010=\texttt{A2}_{16}$); +\\[4pt] +% +$x\bmod m$ && +для целого числа~$x$ и натурального числа~$m$ +остаток от деления~$x$ на~$m$, +т.~е. число $r\in\{0,1,\ldots,m-1\}$ такое, что~$m$ делит $x-r$; +\\[4pt] +% +$x\equiv y\pmod m$ && +$x$ сравнимо с $y$ по модулю $m$, т.~е. $x\bmod m=y\bmod m$; +\\[4pt] +% +$\bar u$ && +а)~для~$u=u_1 u_2\ldots u_8\in\{0,1\}^8$ +число $2^7 u_1+2^6 u_2+\ldots+u_8$ и\\[2pt] +% + && +б)~для~$u=u_1\parallel u_2\parallel\ldots\parallel u_n$, $u_i\in\{0,1\}^8$, +число~$\bar u_1+2^8\bar u_2+\ldots+2^{8(n-1)}\bar u_n$; +\\[4pt] +% +$\langle U\rangle_{8n}$ && +для целого числа~$U$ +слово $u\in\{0,1\}^{8n}$ такое, что $\bar u=U\bmod 2^{8n}$; +\\[4pt] +% +$\FF_p$ && +для простого числа~$p$ множество~$\{0,1,\ldots,p-1\}$ +с операциями сложения и умножения по модулю~$p$, +конечное поле из~$p$ элементов; +\\[4pt] +% +$E_{a,b}^*(\FF_p)$ && +для~$a,b\in\FF_p$ множество решений~$(x,y)$, $x,y\in\FF_p$, +уравнения~$y^2=x^3+ax+b$, +множество аффинных точек эллиптической кривой; +\\[4pt] +% +$O$ && +бесконечно удаленная точка; +\\[4pt] +% +$E_{a,b}(\FF_p)$ && +множество $E_{a,b}^*(\FF_p)\cup\{O\}$ с операцией сложения точек, +группа точек эллиптической кривой; +\\[4pt] +% +$kP$ && +для $P\in E_{a,b}(\FF_p)$ сумма~$k$ экземпляров~$P$, +кратная~$P$ точка; +\\[4pt] +% +$l$ && +уровень стойкости, +число из множества $\{128, 192, 256\}$; +\\[4pt] +% +$\langle P\rangle_n$ && +для~$P=(x,y)\in E_{a,b}^*(\FF_p)$, +где $2^{2l-1}> (little-endian): +считается, что первый байт является младшим, последний~--- старшим. +Например, слову $w$ соответствует число +$$ +\bar{w}=177+2^{8}\cdot 148+2^{16}\cdot 186+2^{24}\cdot 200 = 3367670961. +$$ + +\subsection{Конечные поля} + +Элементы~$\FF_p$ складываются и умножаются +как целые числа с заменой результата на остаток от его деления на~$p$. +Множество~$\FF_p$ с такими операциями является конечным простым полем. +Нулевым элементом поля является число~$0$, +а мультипликативной единицей~--- число~$1$ +(подробнее см.~\cite{LidNid88}). + +Кроме сложения и умножения, в поле~$\FF_p$ можно выполнять вычитание и деление. +% +Вычитание $u$ состоит в сложении с $p-u$. +% +Деление на $u\in\{1,2,\ldots,p-1\}$ состоит в +умножении на число~$v\in\{1,2,\ldots,p-1\}$ такое, +что $uv\equiv 1\pmod{p}$. + +Например, в поле~$\FF_7$ выполняется: +$$ +4+5=2,\quad +4\cdot 5=6,\quad +4-5=4+(7-5)=6,\quad +4/5 = 4\cdot 3=5. +$$ + +Квадраты ненулевых элементов~$\FF_p$ +называются квадратичными вычетами по модулю~$p$. +Например, имеется~$3$ квадратичных вычета по модулю~$7$: +$$ +1=1^2,\quad +2=3^2,\quad +4=2^2. +$$ + +\subsection{Эллиптические кривые} + +Пусть~$p>3$ и~$4a^3+27b^2\not\equiv 0\pmod{p}$. +Множество~$E^*_{a,b}(\FF_p)$ состоит из решений уравнения +$y^2=x^3+ax+b$ относительно $x,y\in\FF_p$. +Уравнение такого вида определяет эллиптическую кривую над полем~$\FF_p$, +его решения $(x,y)$ называются аффинными точками кривой. +К аффинным точкам добавляется специальная бесконечно удаленная +точка~$O$ и образуется множество~$E_{a,b}(\FF_p)$ +(подробнее см.~\cite{ECC}). +Например, +$$ +E_{4,1}(\FF_{7})=\{O,(0,1),(0,6),(4,2),(4,5)\}. +$$ + +Множество~$E_{a,b}(\FF_p)$ является аддитивной группой +при следующих правилах сложения: +\begin{enumerate} +\item +$O+P=P+O=P$ для всех $P\in E_{a,b}(\FF_p)$. + +\item +Если $P=(x,y)\in E_{a,b}^*(\FF_p)$, то $-P=(x,p-y)$ и $P+(-P)=O$. + +\item +Если $P_1=(x_1,y_1)\in E_{a,b}^*(\FF_p)$, +$P_2=(x_2,y_2)\in E_{a,b}^*(\FF_p)$ и~$P_2\neq -P_1$, +то $P_1+P_2=(x_3,y_3)$, +где +$ +x_3=\lambda^2-x_1-x_2,\quad +y_3=\lambda(x_1-x_3)-y_1,\quad +\lambda=\left\{ +\begin{array}{rl} +\dfrac{y_2-y_1}{x_2-x_1}, & P_1\neq P_2,\\[12pt] +\dfrac{3x_1^2+a}{2 y_1}, & P_1=P_2 +\end{array} +\right. +$\\ +(вычисления ведутся в~$\FF_p$). +\end{enumerate} + +Сумма $k$ экземпляров точки~$P$ называется $k$-кратной ей точкой +и обозначается через~$kP$. +Например, для $P=(4,2)\in E_{4,1}(\FF_7)$ ее кратные имеют вид: +\begin{align*} +2P&=(4,2)+(4,2)=(0,1),\quad +&3P&=(0,1)+(4,2)=(0,6),\\ +4P&=2(0,1)=(4,5),\quad +&5P&=(0,1)+(0,6)=O. +\end{align*} +Считается, что $0P=O$. + +\subsection{Обозначения протоколов} + +Протоколы настоящего стандарта выполняют две стороны, +которые обозначаются символами~$A$ и~$B$. +% +%Стороны не равнозначны: сторона~$A$ инициирует протокол, +%а сторона~$B$ отвечает на действия~$A$. +% +Объекты, которыми владеют или управляют стороны +(ключи, сообщения, идентификаторы, переменные), +снабжаются нижними индексами: $A$ или $B$. + +Квадратными скобками окаймляются +необязательные сообщения и действия сторон протокола, +связанные с явным подтверждением ключа (см.~\ref{COMMON.Dest}). + +Фигурными скобками окаймляются сертификаты~(см.~\ref{COMMON.Cert}) +и приветственные сообщения (см.~\ref{COMMON.Hello}), +которые могут передаваться предварительно или неявно. +Действия по передаче и обработке таких сообщений +также окаймляются фигурными скобками. + + + + + diff --git a/spec/05Common.tex b/spec/05Common.tex new file mode 100644 index 0000000..8414155 --- /dev/null +++ b/spec/05Common.tex @@ -0,0 +1,441 @@ +\chapter{Общие положения}\label{COMMON} + +\section{Назначение}\label{COMMON.Dest} + +Настоящий стандарт определяет криптографические протоколы, +которые позволяют двум сторонам сформировать общий, +только им известный, ключ. +% +Ключ формируется так, что ни одна из сторон +не может определить его значение самостоятельно, +без данных от противоположной стороны. + +Общий ключ представляет собой двоичное слово длины~$256$. +% +Этот ключ может использоваться для аутентификации, +шифрования, имитозащиты, выработки других общих секретных данных. +% +В криптографических алгоритмах, длины ключей которых меньше 256, +может использоваться только часть общего ключа. При формировании этой +части в общем ключе следует отбрасывать последние символы и оставлять +первые. + +Протоколы построены по схемам MQV~\cite{MQV}, +STS~\cite{STS} и PACE~\cite{PACE}. +% +Схема определяет общий вид протокола и не содержит исчерпывающих деталей, +обеспечивающих совместимость различных его реализаций. +% +В настоящем стандарте +зафиксированы все базовые криптографические алгоритмы схем, +окончательно определены действия сторон, +уточнены форматы передаваемых сообщений. +В схемы~MQV и~STS встроены алгоритмы ЭЦП, +схожие с алгоритмами СТБ~34.101.45. +% +В схеме~STS выработка одноразовой подписи +совмещена с расчетом одноразовых открытых ключей. +% +Окончательные протоколы названы BMQV~(\ref{MQV}), +BSTS~(\ref{STS}) и BPACE~(\ref{PACE}). + +Протоколы BMQV и BSTS +позволяют сторонам сформировать общий ключ, +используя долговременные личные ключи и обмениваясь +соответствующими открытыми ключами. +% +Эффективность BMQV выше, но BSTS дополнительно +обеспечивает анонимность~--- +злоумышленник, который не вступает во взаимодействие со сторонами, +а только перехватывает их сообщения, +не получает информации о том, какие стороны +участвуют в протоколе. + +Протокол BPACE позволяет сторонам сформировать общий ключ, +используя общий пароль. +% +Злоумышленнику, который перехватывает все сообщения протокола +(вступая или не вступая во взаимодействие со сторонами), +вычислительно трудно определить пароль, +даже если он короткий или низкоэнтропийный. +% +Выполняя сеанс протокола с легальной стороной, +злоумышленник может проверить только один вариант пароля. + +Все протоколы настоящего стандарта обеспечивают +конфиденциальность ключей, сформированных сторонами. +% +Кроме этого, в протоколах предусмотрена проверка того, +что та или другая сторона сформировала корректный ключ, +совпадающий с ключом противоположной стороны. +% +Такая проверка называется явным подтверждением ключа. +% +Подтверждать ключ может либо одна, +либо обе стороны. +% +Явное подтверждение ключа является обязательной частью~BSTS +и необязательной частью~BMQV и~BPACE. + +Даже если подтверждение ключа явно не включено в протокол, +оно может быть неявно выполнено после его завершения. +Если, например, стороны используют общий ключ для +шифрования структурированных данных, +то нарушение формата данных после расшифрования +является признаком того, что ключи сторон отличаются. + +Успешное подтверждение ключа в протоколе BPACE означает, что +сторона знает секретный пароль. +% +Поэтому протокол может использоваться для аутентификации +сторон друг перед другом. + +Успешное подтверждение ключа в протоколах BMQV и BSTS означает, +что сторона с определенным идентификатором +владеет долговременным личным ключом, +который соответствует отосланному ею открытому ключу. +Данные протоколы также могут использоваться для аутентификации, +если дополнительно проверяется соответствие между +идентификатором и долговременным открытым ключом стороны. +Такое соответствие устанавливается +за рамками протоколов и фиксируется +в сертификатах (см.~\ref{COMMON.Cert}). + +В протоколах используются вычисления в группе +точек эллиптической кривой над конечным простым полем. +% +Сначала стороны формируют общую секретную точку кривой, +а затем по ней и дополнительным открытым данным +(в том числе сообщениям протокола) +вырабатывают общий ключ. +% +Для этого используется алгоритм построения ключа, +определенный в~\ref{KDF}. +% +С помощью этого алгоритма формируются +также служебные ключи, +предназначенные для имитозащиты и шифрования +служебных данных протоколов. + +В~\ref{SWU} определяется вспомогательный алгоритм +преобразования двоичного слова в точку эллиптической кривой. +Этот алгоритм используется в протоколе~BPACE. +Алгоритм построен в соответствии с~\cite{SWU}. + +Все протоколы настоящего стандарта основаны на протоколе +Диффи~--- Хеллмана, который описывается в приложении~\ref{DH}. +В этом приложении обсуждается стойкость протокола, +и определяются условия его безопасного встраивания +в высокоуровневые протоколы. + +В приложении~\ref{TEST} приводятся примеры выполнения +протоколов BMQV, BSTS, BPACE. +Примеры можно использовать для проверки корректности реализаций +протоколов. + +В приложении~\ref{ASN} приводится модуль +абстрактно-синтаксической нотации версии~1 (АСН.1), +определенной в~ГОСТ 34.973. +Модуль задает идентификаторы протоколов и других объектов +стандарта, описывает структуры данных для хранения +ключей и параметров. +% +Рекомендуется использовать модуль +при встраивании протоколов в информационные системы, +в которых также используется АСН.1. + +\section{Стойкость}\label{COMMON.Strength} + +Протоколы построены так, что злоумышленнику +вычислительно трудно определить общий ключ или +выдать себя за другую сторону, не зная долговременный +личный ключ этой стороны (BMQV, BSTS) или общий пароль (BPACE). + +Стойкость протоколов определяется уровнем~$l\in\{128,192,256\}$. +% +На уровне~$l$ для определения общего ключа по сообщениям +протокола злоумышленнику требуется выполнить +порядка~$2^l$ операций. +% +Cтойкость основывается на сложности дискретного логарифмирования +в группе точек эллиптической кривой +и на сложности вычислительной задачи +Диффи~--- Хеллмана в этой группе (см. приложение~\ref{DH}). +% +Оценки стойкости не изменятся, +если на уровне~$l\in\{128,192\}$ длина общего ключа уменьшится +c~$256$ до~$l$. + +Протоколы обеспечивают защиту от <<чтения назад>>. +Это значит, что определение общего ключа остается такой же трудной +задачей, даже если злоумышленнику, дополнительно к сообщениям протокола, +становятся известными долговременные личные ключи сторон или +их общий пароль, но остаются неизвестными одноразовые +личные или секретные ключи. +% +%%Получив долговременные личные ключи стороны~$A$, +%злоумышленник может выдать себя за~$A$ стороне~$B$, +%но не может выдать себя за~$B$ стороне~$A$. + +% todo: раскрытие общего ключа +% todo: раскрытие одноразовых ключей + +Уровень~$l$ определяет длины параметров, +ключей, сообщений и, соответственно, быстродействие протоколов. +% +Следует учитывать, что с ростом~$l$, кроме повышения стойкости, +снижается быстродействие. + +Явное подтверждение ключа основано на проверке имитовставок, +вычисленных на общем служебном ключе. +Злоумышленник, который не знает этот ключ, +может обойти механизм подтверждения только в одном из~$2^{64}$ сеансов +протокола в среднем. +% +В протоколе BSTS, кроме имитовставок, +проверяются также зашифрованные одноразовые подписи и сертификаты, +поэтому надежность подтверждения ключа в BSTS еще выше. + +Явное подтверждение ключа выполняется так, что злоумышленник +не может подтвердить ключ, отвечая данными, +которыми подтверждает ключ противоположная сторона. +% +Неявное подтверждение ключа, выполняемое за рамками BMQV и BSTS, +также должно обладать этим свойством. + +Стойкость механизма аутентификации основана на +стойкости механизма подтверждения ключа и, дополнительно +для~BMQV и BSTS, на надежности связывания +идентификаторов сторон с их открытыми ключами в сертификатах +(см.~\ref{COMMON.Cert}). +% +Если связывание задается с помощью ЭЦП доверенной стороны, +то надежность связывания определяется стойкостью алгоритмов ЭЦП. + +%Выводы о стойкости сохраняются и тогда, когда $A=B$. + +\section{Параметры эллиптической кривой}\label{COMMON.Params} + +{\bf Модуль~$p$.} +Используется простое число $p$, которое удовлетворяет условиям: +$2^{2l-1}>, +который выполняет протокол с каждой из сторон +по-отдельности, выдавая себя за $A$ стороне~$B$ и за~$B$ стороне~$A$. +% +Злоумышленник формирует общие ключи с каждой из сторон, +а затем полностью контролирует обмен сообщений между ними, +перешифровывая данные или пересчитывая имитовставки. + +Для защиты от злоумышленника <<посередине>> протокол +Диффи~-- Хеллмана должен сопровождаться дополнительными +механизмами безопасности. +Фактически протокол Диффи~--- Хеллмана должен являться +составной частью некоторого высокоуровневого протокола, +который эти механизмы поддерживает. + +Могут использоваться следующие два механизма, +обеспечивающие надежное применение описанной выше +редакции протокола Диффи~--- Хеллмана. + +Первый механизм состоит в контроле целостности и подлинности +открытых ключей при их передаче между сторонами. +% +Для организации контроля +долговременные открытые ключи протокола могут +передаваться в виде сертификатов. +% +Могут также использоваться долговременные ключи ЭЦП, с помощью которых стороны +вырабатывают и проверяют подписи данных обмена. (Именно такой подход использован +в протоколе BSTS). +% +Наконец для организации контроля могут использоваться +долговременные секретные ключи имитозащиты, +с помощью которых стороны вырабатывают и проверяют +имитовставки данных обмена. + +Второй механизм состоит в использовании дополнительных секретных +данных при построении общего ключа. +% +Имеется в виду, что на вход алгоритма построения ключа кроме +общей секретной точки~$K$ подаются секретные ключи, +предварительно распределенные или полученные в результате +выполнения других протоколов. +% + +\end{appendix} + +\mbox{} +\vfill +\mbox{} +\clearpage diff --git a/spec/92Test.tex b/spec/92Test.tex new file mode 100644 index 0000000..a6d656b --- /dev/null +++ b/spec/92Test.tex @@ -0,0 +1,321 @@ +\begin{appendix}{Б}{справочное} +{Проверочные примеры} +\label{TEST} + +\hiddensection{Параметры эллиптической кривой}\label{TEST.Params} + +Во всех примерах используются параметры эллиптической кривой, +заданные в СТБ~34.101.45 (таблица Б.1). + +\hiddensection{Идентификаторы и долговременные ключи}\label{TEST.Keys} + +В таблице~\ref{Table.TEST.IdKeys} представлены идентификаторы +и долговременные ключи сторон протоколов BMQV и~BSTS. +Сертификаты сторон представляют +собой объединение их идентификаторов и открытых ключей: +$\Cert(Id,Q)=Id\parallel\langle Q\rangle$. + +\begin{table}[H] +\caption{Идентификаторы и долговременные ключи}\label{Table.TEST.IdKeys} +{\small +\begin{tabular}{|l|l|} +\hline +$\phantom{\langle}Id_A$ & +$\hex{416C6963~65}$\\ +% +\hline +\hline +$\langle d_A\rangle_{256}$ & +$\hex{1F66B5B8~4B733967~4533F032~9C74F218~34281FED~0732429E~0C79235F~C273E269}$\\ +% +\hline +$\langle Q_A\rangle_{512}$ & +$\hexz{BD1A5650~179D79E0~3FCEE49D~4C2BD5DD~F54CE46D~0CF11E4F~F87BF7A8~90857FD0}$\\ +& +$\hex{7AC6A603~61E8C817~3491686D~461B2826~190C2EDA~5909054A~9AB84D2A~B9D99A90}$\\ +% +\hline +\hline +$\phantom{\langle}Id_B$ & +$\hex{426F62}$\\ +% +\hline +\hline +$\langle d_B\rangle_{256}$ & +$\hex{4C0E74B2~CD5811AD~21F23DE7~E0FA742C~3ED6EC48~3C461CE1~5C33A77A~A308B7D2}$\\ +% +\hline +$\langle Q_B\rangle_{512}$ & +$\hexz{CCEEF1A3~13A40664~9D15DA0A~851D486A~695B641B~20611776~252FFDCE~39C71060}$ \\ +& +$\hex{7C9EA1F3~3C23D20D~FCB8485A~88BE6523~A28ECC32~15B47FA2~89D6C9BE~1CE837C0}$\\ +\hline +\end{tabular} +} +\end{table} + +\hiddensection{Приветственные сообщения}\label{TEST.Hello} + +Во всех примерах используются пустые приветственные сообщения +$\hello_A$, $\hello_B$. + +\hiddensection{Протокол BMQV}\label{TEST.MQV} + +В таблице~\ref{Table.TEST.MQV} представлен сеанс протокола~BMQV. + +\begin{table}[H] +\caption{Сеанс протокола BMQV}\label{Table.TEST.MQV} +{\small +\begin{tabular}{|l|l|} +\hline +$\langle u_B\rangle_{256}$ & +$\hex{0F51D913~47617C20~BD4AB07A~EF4F26A1~AD1362A8~F9A3D42F~BE1B8E6F~1C88AAD5}$\\ +% +\hline +$\langle V_B\rangle_{512}$ & +$\hexz{9B4EA669~DABDF100~A7D4B6E6~EB76EE52~51912531~F426750A~AC8A9DBB~51C54D8D}$\\ +& +$\hex{6AB7DBF1~5FCBD768~EE68A173~F7B236EF~C15A01E2~AA6CD1FE~98B947DA~7B38A2A0}$\\ +% +\hline +\hline +$\langle u_A\rangle_{256}$ & +$\hex{0A4E8298~BE0839E4~6F19409F~637F4415~572251DD~0D39284F~0F0390D9~3BBCE9EC}$\\ +% +\hline +$\langle V_A\rangle_{512}$ & +$\hexz{1D5A382B~962D4ED0~6193258C~A6DE535D~8FD7FACB~853171E9~32EF93B5~EE800120}$\\ +& +$\hex{03DBB7B5~BD070363~80BAFA47~FCA7E6CA~3F179EDD~D1AE5086~64790918~3628EDDC}$\\ +% +\hline +$\phantom{\langle}t$ & +$\hex{BD46F58A~DE7C4DF9~826D32AB~A9113428}$\\ +% +\hline +$\langle s_A\rangle_{256}$ & +$\hex{AB4EB3A6~D867C861~52E61B64~7F1A32D9~93A7768F~79361F75~0AE7C7A6~5CD9A233}$\\ +% +\hline +$\langle K\rangle_{512}$ & +$\hexz{7FF3A0DA~CDFECB3C~D25F4D3C~334CCCB3~34C71FF7~1E2247DD~0688FA62~DF4C5920}$\\ +& +$\hex{728CB855~98DA04B4~8D85D32D~0CDCCD92~3D88E844~9BAA5065~B4E4D1CB~EEE31D35}$\\ +% +\hline +$\phantom{\langle}K_0$ & +$\hex{C6F86D0E~468D5EF1~A9955B2E~E0CF0581~050C81D1~B4772709~2408E863~C7EEB48C}$\\ +% +\hline +$\phantom{\langle}K_1$ & +$\hex{E95BA3F6~45C58288~E8A1B37C~10ADD336~DB8BD7F6~75F94963~139769F2~E260C6A9}$\\ +% +\hline +$\phantom{\langle}T_A$ & +$\hex{413B7E18~1BAFB337}$\\ +% +\hline +\hline +% +$\langle s_B\rangle_{256}$ & +$\hex{B6099633~2B62DDB1~354EC03D~A949B528~969E6CA6~D8848C94~013B9CF6~FF42AEED}$\\ +% +\hline +$\phantom{\langle}T_B$ & +$\hex{B800A203~3AC7591B}$\\ +\hline +\end{tabular} +} +\end{table} + +\hiddensection{Протокол BSTS}\label{TEST.STS} + +В таблице~\ref{Table.TEST.STS} представлен сеанс протокола~BSTS. + +\begin{table}[H] +\caption{Сеанс протокола BSTS}\label{Table.TEST.STS} +{\small +\begin{tabular}{|l|l|} +\hline +$\langle u_B\rangle_{256}$ & +$\hex{0F51D913~47617C20~BD4AB07A~EF4F26A1~AD1362A8~F9A3D42F~BE1B8E6F~1C88AAD5}$\\ +% +\hline +$\langle V_B\rangle_{512}$ & +$\hexz{9B4EA669~DABDF100~A7D4B6E6~EB76EE52~51912531~F426750A~AC8A9DBB~51C54D8D}$\\ +& +$\hex{6AB7DBF1~5FCBD768~EE68A173~F7B236EF~C15A01E2~AA6CD1FE~98B947DA~7B38A2A0}$\\ +% +\hline +\hline +$\langle u_A\rangle_{256}$ & +$\hex{0A4E8298~BE0839E4~6F19409F~637F4415~572251DD~0D39284F~0F0390D9~3BBCE9EC}$\\ +% +\hline +$\langle V_A\rangle_{512}$ & +$\hexz{1D5A382B~962D4ED0~6193258C~A6DE535D~8FD7FACB~853171E9~32EF93B5~EE800120}$\\ +& +$\hex{03DBB7B5~BD070363~80BAFA47~FCA7E6CA~3F179EDD~D1AE5086~64790918~3628EDDC}$\\ +% +\hline +$\langle K\rangle_{512}$ & +$\hexz{C9121850~4B2F10C8~B307B3F8~5A292930~8E48F334~51D2810A~AD788DE8~CA4C7347}$\\ +& +$\hex{76932167~30B95FD3~C1439D6C~B99A1A0B~2898FC56~3558C8F5~18E235B9~D7441A6E}$\\ +% +\hline +$\phantom{\langle}K_0$ & +$\hex{78EF2C56~BD6DA211~6BB5BEE8~0CEE5C05~394E7609~183CF7F7~6DF0C2DC~FB25C4AD}$\\ +% +\hline +$\phantom{\langle}K_1$ & +$\hex{F02580E9~5C1E89BD~9E743C02~716E3E31~FA429298~AE0FD1FE~2BBA1B57~02E51B9D}$\\ +% +\hline +$\phantom{\langle}K_2$ & +$\hex{41283622~4A0C0964~1F3C3B88~8C7804FA~32B94A62~B5CB0066~518409F9~69191776}$\\ +% +\hline +$\phantom{\langle}t$ & +$\hex{BD46F58A~DE7C4DF9~826D32AB~A9113428}$\\ +% +\hline +$\langle s_A\rangle_{256}$ & +$\hex{AB4EB3A6~D867C861~52E61B64~7F1A32D9~93A7768F~79361F75~0AE7C7A6~5CD9A233}$\\ +% +\hline +$\phantom{\langle}Y_A$ & +$\hexz{A994115F~297D2FAD~342A0AF5~4FCDA66E~1E6A30FE~966662C4~3C2A73AF~A3CADF69}$\\ +& +$\hexz{47344287~CB200795~61645867~8B76BA61~924AD05D~80BB81F5~3F8D5C4E~0EF55EBD}$\\ +& +$\hexz{AFA674D7~ECD74CB0~609DE12B~C0463670~64059F01~1607DD18~62407490~1F1C5A40}$\\ +& +$\hex{94C00655~9F}$\\ +% +\hline +$\phantom{\langle}T_A$ & +$\hex{1306D682~00087987}$\\ +% +\hline +\hline +% +$\langle s_B\rangle_{256}$ & +$\hex{B6099633~2B62DDB1~354EC03D~A949B528~969E6CA6~D8848C94~013B9CF6~FF42AEED}$\\ +% +\hline +$\phantom{\langle}Y_B$ & +$\hexz{6D45B2E7~6AF24422~ADC6D5D7~A3CFA37F~DCB52F7E~440222F1~AACECB98~BDED357B}$\\ +& +$\hexz{BD459DF0~A3EE7A3E~AFE0199C~A5C4C072~7C33909E~4C322216~F6F53E38~3A3727D8}$\\ +& +$\hexz{34B5D4F5~C977FC3B~7EBA6DCA~55C0F1A5~69BE3CD3~464B13C3~88D0DAC3~E6A82F9D}$\\ +& +$\hex{2EF3D6}$\\ +% +\hline +$\phantom{\langle}T_B$ & +$\hex{CA7A5BAC~4EB2910E}$\\ +\hline +\end{tabular} +} +\end{table} + +\clearpage +\hiddensection{Протокол BPACE}\label{TEST.PACE} + +В таблице~\ref{Table.TEST.PACE} представлен сеанс протокола~BPACE. + +\begin{table}[H] +\caption{Сеанс протокола BPACE}\label{Table.TEST.PACE} +{\small +\begin{tabular}{|l|l|} +\hline +$\phantom{\langle}P$ & +$\hex{38303836}$\\ +\hline +% +\hline +$\phantom{\langle}R_B$ & +$\hex{0F51D913~47617C20~BD4AB07A~EF4F26A1}$\\ +% +\hline +$\phantom{\langle}K_2$ & +$\hex{3292E21E~6CD50D27~2532713B~A52570A4~C996319E~2436B385~7DB0ACB4~5660F4EB}$\\ +% +\hline +$\phantom{\langle}Y_B$ & +$\hex{991E8169~0B4C687C~86BFD11C~EBDA2421}$\\ +% +\hline +\hline +% +$\phantom{\langle}R_A$ & +$\hex{AD1362A8~F9A3D42F~BE1B8E6F~1C88AAD5}$\\ +% +\hline +$\phantom{\langle}Y_A$ & +$\hex{CE41B54D~C13A28BD~F74CEBD1~90881802}$\\ +% +\hline +$\langle W\rangle_{512}$ & +$\hexz{014417D3~35555731~7D2E2AB6~D0875487~8D19E8D9~7B71FDC9~5DBB2A9B~894D16D7}$\\ +& +$\hex{7704A0B5~CAA9CDA1~0791E476~0671E105~0DDEAB70~83A74584~47866ADB~01473810}$\\ +% +\hline +$\langle u_A\rangle_{256}$ & +$\hex{0A4E8298~BE0839E4~6F19409F~637F4415~572251DD~0D39284F~0F0390D9~3BBCE9EC}$\\ +% +\hline +$\langle V_A\rangle_{512}$ & +$\hexz{6B13ACBB~086FB876~18BCC2EF~20A3FA89~475654CB~367E670A~2441730B~24B8AB31}$\\ +& +$\hex{8209C81C~9640C47A~77B28E90~AB9211A1~DF21DE87~8191C314~061E347C~5125244F}$\\ +% +\hline +\hline +% +$\langle u_B\rangle_{256}$ & +$\hex{F81B29D5~71F6452F~F8B2B97F~57E18A58~BC946FEE~45EAB32B~06FCAC23~A33F422B}$\\ +% +\hline +$\langle V_B\rangle_{512}$ & +$\hexz{CD3D6487~DC4EEB23~45697818~6A069C71~375D75C2~DF198BAD~1E61EEA0~DBBFF737}$\\ +& +$\hex{3D1D9ED1~7A7AD460~AA420FB1~1952D580~78BC1CC9~F408F2E2~58FDE97F~22A44C6F}$\\ +% +\hline +$\langle K\rangle_{512}$ & +$\hexz{723356E3~35ED7062~0FFB1842~752092C3~2603EB66~60409205~87D80057~5BECFC42}$\\ +& +$\hex{0C4B4C9B~4AEB51D3~6FE2EDEB~1369CE39~676CE544~0E29916C~97FBA4F3~ED6A31BD}$\\ +% +\hline +$\phantom{\langle}K_0$ & +$\hex{DAC4D8F4~11F9C523~D28BBAAB~32A5270E~4DFA1F0F~757EF8E0~F30AF08F~BDE1E7F4}$\\ +% +\hline +$\phantom{\langle}K_1$ & +$\hex{54AC0582~84D679CF~4C47D3D7~2651F3E4~EF0D61D1~D0ED5BAF~8FF30B89~24E599D8}$\\ +% +\hline +$\phantom{\langle}T_B$ & +$\hex{28FD4859~D78BA971}$\\ +% +\hline +\hline +% +$\phantom{\langle}T_A$ & +$\hex{5D93FD9A~7CB863AA}$\\ +\hline +\end{tabular} +} +\end{table} + +\end{appendix} + +\mbox{} +\vfill +\mbox{} +\clearpage diff --git a/spec/93ASN.tex b/spec/93ASN.tex new file mode 100644 index 0000000..cc48e72 --- /dev/null +++ b/spec/93ASN.tex @@ -0,0 +1,66 @@ +\begin{appendix}{В}{рекомендуемое} +{Модуль АСН.1} +\label{ASN} + +\hiddensection{Идентификаторы}\label{ASN.OIDs} + +Алгоритмам и протоколам стандарта присваиваются +следующие идентификаторы: +\begin{center} +\begin{tabular}{p{4cm}p{12cm}} +\texttt{bake-bmqv} & +протокол BMQV (\ref{MQV});\\ +% +\texttt{bake-bsts} & +протокол BSTS (\ref{STS});\\ +% +\texttt{bake-bpace} & +протокол BPACE (\ref{PACE});\\ +% +\texttt{bake-dh} & +алгоритм определения общей точки по личному ключу +одной стороны и открытому ключу другой стороны, +часть протокола Диффи~--- Хеллмана (приложение~\ref{DH});\\ +% +\texttt{bake-kdf} & +алгоритм построения ключа (\ref{KDF.Alg});\\ +% +\texttt{bake-swu} & +алгоритм построения точки эллиптической кривой (\ref{SWU.Alg}).\\ +\end{tabular} +\end{center} + +Уровень стойкости протоколов ключа не указывается +в их идентификаторах и определяется по размерностям параметров +используемой эллиптической кривой. + +Долговременному открытому ключу, +который используется в протоколах BMQV и BSTS, +присваивается идентификатор \texttt{bake-pubkey}. + +\hiddensection{Описание долговременного открытого ключа}\label{ASN.PubKey} + +На уровне стойкости~$l$ долговременному открытому ключу~$Q$ +ставится в соответствие двоичное слово~$\langle Q\rangle_{4l}$, +для описания которого может использоваться тип \texttt{PublicKey}, +определенный в СТБ~34.101.45 (приложение~Д). + +В запросе на получение сертификата (СТБ~34.101.17), +в сертификатах (СТБ~34.101.19) +открытый ключ должен представляться значениями типа +\texttt{SubjectPublicKeyInfo}. +Этот тип также определен в СТБ~34.101.45 +(приложение~Д). + +\hiddensection{Модуль АСН.1}\label{ASN.Module} + +\verbatiminput{bake-module-v1.asn} + +% IMPORTS +% bign-curves, bign-curve256v1, bign-curve384v1, bign-curve512v1, +% bign-fields, bign-primefield, AlgorithmIdentifier, DomainParameters, +% ECParameters, FieldID, Curve, PublicKey, SubjectPublicKeyInfo +% FROM Bign-module-v2 {iso(1) member-body(2) by(112) 0 2 0 34 101 +% 45 module(1) ver2(2)} + +\end{appendix} \ No newline at end of file diff --git a/spec/94Biblio.tex b/spec/94Biblio.tex new file mode 100644 index 0000000..d7d2fba --- /dev/null +++ b/spec/94Biblio.tex @@ -0,0 +1,59 @@ +\clearpage +\begin{thebibliography}{999} +\bibitem{LidNid88} +Лидл~Р., Нидеррайтер~Г. Конечные поля\\ +{\small М.: Мир, 1988} + +\bibitem{ECC} +Hankerson~D., Menezes~A., Vanstone S. +Guide to Elliptic Curve Cryptography\\ +{\small N.~Y.: Springer, 2004}\\ +{\small (Введение в криптографию на эллиптических кривых)} + +\bibitem{MQV} +Law~L., Menezes~A., Qu~M., Solinas~J., Vanstone~S. +An Efficient Protocol for Authenticated Key Agreement\\ +{\small Designs, Codes and Cryptography, 28(2), 119-134, 2003}\\ +{\small (Эффективный протокол формирования общего ключа и аутентификации)} + +\bibitem{STS} +Diffie~W., Oorschot~P., Wiener~M. +Authentication and Authenticated Key Exchanges\\ +{\small Designs, Codes and Cryptography, 2(2): 107--125, 1992}\\ +{\small (Аутентификация и обмен ключами с аутентификацией)} + +\bibitem{PACE} +Bender~J., Fischlin~M., Kuegler~D. +Security Analysis of the PACE Key-Agreement Protocol\\ +{\small Cryptology ePrint Archive, Report 2009/624, 2009}\\ +%Avail. at: \url{eprint.iacr.org/2009/624.pdf}. +{\small (Оценка надежности протокола формирования общего ключа PACE)} + +\bibitem{SWU} +Brier~E., Coron~J., Icart~T., Madore~D., Randriam~H., Tibouch~M. +Efficient Indifferentiable Hashing into Ordinary Elliptic Curves\\ +{\small Advances in Cryptology~--– CRYPTO 2010, +Lecture Notes in Computer Science, 6223: 237--254, Springer-Verlag, +2010}\\ +% +{\small (Эфективное неразличимое хэширование на обычные эллиптические +кривые)} + +\bibitem{UTF8} +ISO/IEC 10646:2012 +Information technology~-- Universal Coded Character Set (UCS)\\ +{\small International Organization for Standardization, 2012}\\ +{\small (Информационные технологии. +Универсальный набор кодированных символов (UCS))} + +\bibitem{DH} +Diffie~W., Hellman~M. +New Directions in Cryptography\\ +{\small IEEE Transactions on Information Theory, IT-22, 644–654, 1976}\\ +{\small (Новые направления в криптографии)} + +\label{LastBib} +\end{thebibliography} + + + diff --git a/spec/99Errata.tex b/spec/99Errata.tex new file mode 100644 index 0000000..77f91a1 --- /dev/null +++ b/spec/99Errata.tex @@ -0,0 +1,54 @@ +\clearpage +\chapter*{\mbox{}\hfill Поправка к официальной редакции\hfill\mbox{}} + +\mbox{} + +\begin{center} +\begin{tabular}{|p{2.9cm}|p{6.3cm}|p{6.3cm}|} +\hline +В каком месте & Напечатано & Должно быть\\ +\hline +\hline +Подраздел~\ref{AUX} +& +{\bf Алгоритм $\algname{belt-cfb}^{-1}$}. +В протоколе BPACE используется алгоритм расшифрования\ldots +& +{\bf Алгоритм $\algname{belt-cfb}^{-1}$}. +В протоколе BSTS используется алгоритм расшифрования\ldots +\\ +\hline +Пункт~\ref{MQV.Steps},\par +шаг 4.4 +& +$t\leftarrow\langle\algname{belt-hash} +(\langle V_A\rangle_{2l}\parallel\langle V_B\rangle_{2l})\rangle$; +& +$t\leftarrow\langle\algname{belt-hash} +(\langle V_A\rangle_{2l}\parallel\langle V_B\rangle_{2l})\rangle_l$; +\\ +\hline +Пункт~\ref{STS.Steps},\par +шаг 4.7 +& +проверяет, что\par +$T_A\leftarrow\algname{belt-mac}(Y_A\parallel 0^{128}, K_1)$; +& +проверяет, что\par +$T_A=\algname{belt-mac}(Y_A\parallel 0^{128}, K_1)$; +\\ +\hline +Приложение~\ref{DH},\par +предпоследний абзац +& +Могут также использоваться долговременые +ключи ЭЦП, с помощью которых стороны вырабатывают и проверяют +подписи данных обмена. +& +Могут также использоваться долговременные +ключи ЭЦП, с помощью которых стороны вырабатывают и проверяют +подписи данных обмена. +\\ +\hline +\end{tabular} +\end{center} \ No newline at end of file diff --git a/spec/_body.tex b/spec/_body.tex new file mode 100644 index 0000000..89365f7 --- /dev/null +++ b/spec/_body.tex @@ -0,0 +1,32 @@ +\def\draftlogo{\scshape\small СТБ 34.101.66-2014} + +\pagestyle{myheadings} +\input{00Title} +\tableofcontents +\newpage +\thispagestyle{empty} +\mbox{} +\newpage +\setcounter{page}{1} +\pagestyle{headings} + +\input{01Logo} +\input{02Refs} +\input{03Terms} +\input{04Defs} +\input{05Common} +\input{060Algs} +\input{070Prots} +\input{071InOut} +\input{072Aux} +\input{073Vars} +\input{074BMQV} +\input{075BSTS} +\input{076BPACE} + +\input{91DH} +\input{92Test} +\input{93ASN} +\input{94Biblio} +\input{99Errata} + diff --git a/spec/_defs.sty b/spec/_defs.sty new file mode 100644 index 0000000..f06efce --- /dev/null +++ b/spec/_defs.sty @@ -0,0 +1,138 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{_defs} + +%%%%%%%%%%% Format %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand{\doubt}[1]{{\textcolor{red}{#1}}} +\newcommand{\addendum}[1]{\textcolor{blue}{#1}} +\newcommand{\old}[1]{} + +\newcommand{\optional}[1]{$\mathbf{\bigl[}$#1$\mathbf{\bigr]}$} +\newcommand{\mathoptional}[1]{\ensuremath{\mathbf{\bigl[}#1\mathbf{\bigr]}}} +\newcommand{\implicit}[1]{$\mathbf{\bigl\{}$#1$\mathbf{\bigr\}}$} +\newcommand{\mathimplicit}[1]{\ensuremath{\mathbf{\bigl\{}#1\mathbf{\bigr\}}}} + +\newcommand\algname[1]{\texttt{#1}\xspace} +\newcommand\hexz[1]{\ensuremath\texttt{#1}} +\newcommand\hex[1]{\hexz{#1}_{16}} + +\newcounter{defctr} +\setcounter{defctr}{0} +\renewcommand{\thedefctr} +{\addtocounter{defctr}{1}\thechapter.\arabic{defctr}} + +\def\dhline{\hline\hline} +\def\ddhline{\hline\multicolumn{\LT@cols}{c}{}\\[-0.75em]\hline} + +%%%%%%%%%%% Local Commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcommand\btoi[1]{\ensuremath{\lfloor#1\rceil}} +\newcommand\Btoi[1]{\ensuremath{\left\lfloor#1\right\rceil}} +\newcommand\itob[1]{\ensuremath{\langle#1\rangle}} +\newcommand\Itob[1]{\ensuremath{\left\langle#1\right\rangle}} + +\newcommand{\hello}{\texttt{hello}\xspace} +\newcommand{\Cert}{\texttt{Cert}\xspace} + +\providecommand{\ZZ}{\mathbb{Z}} +\providecommand{\FF}{\mathbb{F}} + +%%%%%%%%%%%%%%%%%%%%%%%% Renew %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\renewcommand{\le}{\leqslant} +\renewcommand{\leq}{\leqslant} +\renewcommand{\ge}{\geqslant} +\renewcommand{\geq}{\geqslant} +\providecommand{\No}{\textnumero} + +%%%%%%%%%%% Environments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcounter{note}[subsubsection] + +\newenvironment{note*}{ + \def\thenotename{Примечание~---~} + \list{}{\vskip3pt + \labelwidth=0pt\topsep=0pt\partopsep=0pt\parskip=0pt\parsep=0pt + \itemsep=0pt\itemindent=0pt\leftmargin=\parindent + \labelsep=0pt\small\item[\thenotename]} +}{\vskip3pt\endlist} + +\newenvironment{note}{ + \def\thenotename{Примечание~\@arabic\c@note~---~} + \list{}{\vskip3pt + \labelwidth=0pt\topsep=0pt\partopsep=0pt\parskip=0pt\parsep=0pt + \itemsep=0pt\itemindent=0pt\leftmargin=\parindent + \refstepcounter{note} + \labelsep=0pt\small\item[\thenotename]} +}{\vskip3pt\endlist} + +\newenvironment{notes}{ + \def\thenotename{Примечания} + \list{}{\vskip3pt + \labelwidth=0pt\topsep=0pt\partopsep=0pt\parskip=0pt\parsep=0pt + \itemsep=0pt\itemindent=0pt\leftmargin=\parindent + \labelsep=0pt\small\item[\thenotename]}\mbox{}\par +}{\vskip3pt\endlist} + +\newcounter{example}[subsubsection] + +\newenvironment{example*}{ + \def\theexamplename{Пример~---~} + \list{}{\vskip3pt + \labelwidth=0pt\topsep=0pt\partopsep=0pt\parskip=0pt\parsep=0pt + \itemsep=0pt\itemindent=0pt\leftmargin=\parindent + \labelsep=0pt\small\bf\itshape\item[\theexamplename]} +}{\vskip3pt\endlist} + +\newenvironment{example}{ + \def\theexamplename{Пример~\@arabic\c@example~---~} + \list{}{\vskip3pt + \labelwidth=0pt\topsep=0pt\partopsep=0pt\parskip=0pt\parsep=0pt + \itemsep=0pt\itemindent=0pt\leftmargin=\parindent + \refstepcounter{example} + \labelsep=0pt\small\bf\itshape\item[\theexamplename]} +}{\vskip3pt\endlist} + +\newenvironment{examples}{ + \def\theexamplename{Примеры} + \list{}{\vskip3pt + \labelwidth=0pt\topsep=0pt\partopsep=0pt\parskip=0pt\parsep=0pt + \itemsep=0pt\itemindent=0pt\leftmargin=\parindent + \refstepcounter{example} + \labelsep=0pt\small\bf\itshape\item[\theexamplename]}\mbox{}\par +}{\vskip3pt\endlist} + +%%%%%%%%%%%%%%%%%%%%%%%% Appendix %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\apprefix{} +\newenvironment{appendix}[3] +{ + \clearpage + \chapter*{\mbox{}\hfillПриложение~#1\hfill\mbox{}}% + \vskip-10pt + {\centering + {\bf (#2)}\par + {\large\bf #3}\par + } + \def\@currentlabel{#1} + \def\apprefix{#1.} + \def\thechapter{#1} + \setcounter{table}{0} + \setcounter{section}{0} + \addcontentsline{toc}{chapter}{Приложение~#1~(#2)~#3} +} +{ + \def\apprefix{} + \def\thechapter{\@arabic\c@chapter} +} + +%%%%%%%%%%%%%%%%%%%%%%%% Locale %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\addto\captionsrussian{% + \renewcommand{\figurename}{Рисунок} + \renewcommand\tablename{Таблица} + \renewcommand\contentsname{Содержание} + \renewcommand{\bibname}{Библиография} +} + +\endinput diff --git a/spec/bake-module-v1.asn b/spec/bake-module-v1.asn new file mode 100644 index 0000000..2f409e5 --- /dev/null +++ b/spec/bake-module-v1.asn @@ -0,0 +1,15 @@ +Bake-module-v1 {iso(1) member-body(2) by(112) 0 2 0 34 101 66 module(1) ver1(1)} +DEFINITIONS ::= +BEGIN + bake OBJECT IDENTIFIER ::= {iso(1) member-body(2) by(112) 0 2 0 34 101 66} + + bake-bmqv OBJECT IDENTIFIER ::= {bake 11} + bake-bsts OBJECT IDENTIFIER ::= {bake 12} + bake-bpace OBJECT IDENTIFIER ::= {bake 21} + bake-dh OBJECT IDENTIFIER ::= {bake 31} + bake-kdf OBJECT IDENTIFIER ::= {bake 101} + bake-swu OBJECT IDENTIFIER ::= {bake 201} + + bake-keys OBJECT IDENTIFIER ::= {bake keys(2)} + bake-pubkey OBJECT IDENTIFIER ::= {bake-keys 1} +END diff --git a/spec/bake.tex b/spec/bake.tex new file mode 100644 index 0000000..8de2269 --- /dev/null +++ b/spec/bake.tex @@ -0,0 +1,65 @@ +\documentclass[12pt,a4paper,twoside]{stb} + +\usepackage{cmap} +\usepackage[T2A]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage[english,russian]{babel} + +%\pdfpkresolution=2000 +%\pdfpkmode={supre} + +\usepackage{amsmath,amssymb,xspace,xifthen,graphicx,float,color} +\usepackage{ucs,textcase} + +\usepackage[ + pdftitle={Key Establishment Protocols Based on Elliptic Curves}, + pdfauthor={}, + pdfpagemode=UseOutlines, + pdfstartview=FitH, + linkcolor=black, + citecolor=black]{hyperref} + +\usepackage{ulem} +\normalem + +\usepackage{longtable} +\setlongtables + +\usepackage{enumitem} +\setlist[1]{itemsep=0pt,parsep=0pt,topsep=0pt,partopsep=0pt, + align=left, + leftmargin=0pt,itemindent=1.6\parindent, + labelindent=\parindent,labelwidth=0.5\parindent,labelsep=*, + listparindent=\parindent} +\setlist[2]{itemsep=0pt,parsep=0pt,topsep=0pt,partopsep=0pt, + leftmargin=2.4\parindent} +\setlist[enumerate,1]{label=\arabic*} +\setlist[enumerate,2]{label=\arabic*)} +\setlist[itemize,1]{label=--} + +\usepackage{verbatim} + +\usepackage{_defs} + +\hoffset = -1in +\voffset = -1in +\oddsidemargin = 30mm % стандарт ТКП 1.5-2004 +\evensidemargin = 10mm % верхнее = 20 мм +\textwidth = 170mm % правое = 10 мм +\topmargin = 20mm % левое и нижнее = не менее 20 мм +\textheight = 252mm +\headsep = 1\baselineskip +\headheight = 2\baselineskip +\addtolength{\topmargin}{-\headheight} +\addtolength{\topmargin}{-\headsep} +\parindent = 0.8cm +\intextsep = 3pt + +\renewcommand{\baselinestretch}{1.05} +\setcounter{tocdepth}{1} + +\begin{document} +\begin{sloppypar} +\input{_body} +\end{sloppypar} +\end{document} diff --git a/spec/stb.cls b/spec/stb.cls new file mode 100644 index 0000000..5ee762a --- /dev/null +++ b/spec/stb.cls @@ -0,0 +1,799 @@ +%% +%% This is file `stb.cls', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% classes.dtx (with options: `report') +%% +%% This is a generated file. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file was generated from file(s) of the LaTeX base system. +%% -------------------------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% This file may only be distributed together with a copy of the LaTeX +%% base system. You may however distribute the LaTeX base system without +%% such generated files. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% The list of derived (unpacked) files belonging to the distribution +%% and covered by LPPL is defined by the unpacking scripts (with +%% extension .ins) which are part of the distribution. +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{stb} + [2004/02/16 v1.4f + Standard LaTeX document class] +\newcommand\@ptsize{} +\newif\if@restonecol +\newif\if@titlepage +\@titlepagetrue +\newif\if@openright +\if@compatibility\else +\DeclareOption{a4paper} + {\setlength\paperheight {297mm}% + \setlength\paperwidth {210mm}} +\DeclareOption{a5paper} + {\setlength\paperheight {210mm}% + \setlength\paperwidth {148mm}} +\DeclareOption{b5paper} + {\setlength\paperheight {250mm}% + \setlength\paperwidth {176mm}} +\DeclareOption{letterpaper} + {\setlength\paperheight {11in}% + \setlength\paperwidth {8.5in}} +\DeclareOption{legalpaper} + {\setlength\paperheight {14in}% + \setlength\paperwidth {8.5in}} +\DeclareOption{executivepaper} + {\setlength\paperheight {10.5in}% + \setlength\paperwidth {7.25in}} +\DeclareOption{landscape} + {\setlength\@tempdima {\paperheight}% + \setlength\paperheight {\paperwidth}% + \setlength\paperwidth {\@tempdima}} +\fi +\if@compatibility + \renewcommand\@ptsize{0} +\else +\DeclareOption{10pt}{\renewcommand\@ptsize{0}} +\fi +\DeclareOption{11pt}{\renewcommand\@ptsize{1}} +\DeclareOption{12pt}{\renewcommand\@ptsize{2}} +\if@compatibility\else +\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse} +\fi +\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue} +\DeclareOption{draft}{\setlength\overfullrule{5pt}} +\if@compatibility\else +\DeclareOption{final}{\setlength\overfullrule{0pt}} +\fi +\DeclareOption{titlepage}{\@titlepagetrue} +\if@compatibility\else +\DeclareOption{notitlepage}{\@titlepagefalse} +\fi +\if@compatibility +\else +\DeclareOption{openright}{\@openrighttrue} +\DeclareOption{openany}{\@openrightfalse} +\fi +\if@compatibility\else +\DeclareOption{onecolumn}{\@twocolumnfalse} +\fi +\DeclareOption{twocolumn}{\@twocolumntrue} +\DeclareOption{leqno}{\input{leqno.clo}} +\DeclareOption{fleqn}{\input{fleqn.clo}} +\DeclareOption{openbib}{% + \AtEndOfPackage{% + \renewcommand\@openbib@code{% + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + }% + \renewcommand\newblock{\par}}% +} +\ExecuteOptions{letterpaper,10pt,oneside,onecolumn,final,openany} +\ProcessOptions +\input{size1\@ptsize.clo} +\setlength\lineskip{1\p@} +\setlength\normallineskip{1\p@} +\renewcommand\baselinestretch{} +\setlength\parskip{0\p@ \@plus \p@} +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +\clubpenalty=10000 +\widowpenalty=10000 +\floatsep=0pt + +\def\draftlogo{} + +\setcounter{topnumber}{2} +\renewcommand\topfraction{.7} +\setcounter{bottomnumber}{1} +\renewcommand\bottomfraction{.3} +\setcounter{totalnumber}{3} +\renewcommand\textfraction{.2} +\renewcommand\floatpagefraction{.5} +\setcounter{dbltopnumber}{2} +\renewcommand\dbltopfraction{.7} +\renewcommand\dblfloatpagefraction{.5} +\if@twoside + \def\ps@headings{% + \def\@oddhead{\mbox{}\hfil\draftlogo} + \def\@evenhead{\draftlogo\hfil\mbox{}} + \def\@oddfoot{\mbox{}\hfil\thepage}% + \def\@evenfoot{\thepage\hfil\mbox{}}% + \let\@mkboth\markboth + \def\chaptermark##1{% + \markboth {\MakeUppercase{% + \ifnum \c@secnumdepth >\m@ne + \@chapapp\ \thechapter. \ % + \fi + ##1}}{}}% + \def\sectionmark##1{% + \markright {\MakeUppercase{% + \ifnum \c@secnumdepth >\z@ + \thesection. \ % + \fi + ##1}}}} +\else + \def\ps@headings{% + \def\@oddhead{\mbox{}\hfil\draftlogo} + \def\@evenhead{\draftlogo\hfil\mbox{}} + \def\@oddfoot{\mbox{}\hfil\thepage}% + \def\@evenfoot{\thepage\hfil\mbox{}}% + \let\@mkboth\markboth + \def\chaptermark##1{% + \markright {\MakeUppercase{% + \ifnum \c@secnumdepth >\m@ne + \@chapapp\ \thechapter. \ % + \fi + ##1}}}} +\fi +\def\ps@myheadings{% + \def\@oddhead{\mbox{}\hfil\draftlogo} + \def\@evenhead{\draftlogo\hfil\mbox{}} + \def\@oddfoot{\mbox{}\hfil\@Roman\c@page}% + \def\@evenfoot{\@Roman\c@page\hfil\mbox{}}% + \let\@mkboth\@gobbletwo + \let\chaptermark\@gobble + \let\sectionmark\@gobble + } + \if@titlepage + \newcommand\maketitle{\begin{titlepage}% + \let\footnotesize\small + \let\footnoterule\relax + \let \footnote \thanks + \null\vfil + \vskip 60\p@ + \begin{center}% + {\LARGE \@title \par}% + \vskip 3em% + {\large + \lineskip .75em% + \begin{tabular}[t]{c}% + \@author + \end{tabular}\par}% + \vskip 1.5em% + {\large \@date \par}% % Set date in \large size. + \end{center}\par + \@thanks + \vfil\null + \end{titlepage}% + \setcounter{footnote}{0}% + \global\let\thanks\relax + \global\let\maketitle\relax + \global\let\@thanks\@empty + \global\let\@author\@empty + \global\let\@date\@empty + \global\let\@title\@empty + \global\let\title\relax + \global\let\author\relax + \global\let\date\relax + \global\let\and\relax +} +\else +\newcommand\maketitle{\par + \begingroup + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}% + \long\def\@makefntext##1{\parindent 1em\noindent + \hb@xt@1.8em{% + \hss\@textsuperscript{\normalfont\@thefnmark}}##1}% + \if@twocolumn + \ifnum \col@number=\@ne + \@maketitle + \else + \twocolumn[\@maketitle]% + \fi + \else + \newpage + \global\@topnum\z@ % Prevents figures from going at top of page. + \@maketitle + \fi + \thispagestyle{plain}\@thanks + \endgroup + \setcounter{footnote}{0}% + \global\let\thanks\relax + \global\let\maketitle\relax + \global\let\@maketitle\relax + \global\let\@thanks\@empty + \global\let\@author\@empty + \global\let\@date\@empty + \global\let\@title\@empty + \global\let\title\relax + \global\let\author\relax + \global\let\date\relax + \global\let\and\relax +} +\def\@maketitle{% + \newpage + \null + \vskip 2em% + \begin{center}% + \let \footnote \thanks + {\LARGE \@title \par}% + \vskip 1.5em% + {\large + \lineskip .5em% + \begin{tabular}[t]{c}% + \@author + \end{tabular}\par}% + \vskip 1em% + {\large \@date}% + \end{center}% + \par + \vskip 1.5em} +\fi + +\newcommand*\chaptermark[1]{} +\setcounter{secnumdepth}{3} +\setcounter{tocdepth}{1} +\newcounter {part} +\newcounter {chapter} +\newcounter {section}[chapter] +\newcounter {subsection}[section] +\newcounter {subsubsection}[subsection] +\newcounter {paragraph}[subsubsection] +\newcounter {subparagraph}[paragraph] +\renewcommand \thepart {\@Roman\c@part} +\renewcommand \thechapter {\@arabic\c@chapter} +\renewcommand \thesection {\thechapter.\@arabic\c@section} +\renewcommand\thesubsection {\thesection.\@arabic\c@subsection} +\renewcommand\thesubsubsection{\thesubsection.\@arabic\c@subsubsection} +\renewcommand\theparagraph {\thesubsubsection.\@arabic\c@paragraph} +\renewcommand\thesubparagraph {\theparagraph.\@arabic\c@subparagraph} +\newcommand\@chapapp{\chaptername} +\newcommand\part{% + \if@openright + \cleardoublepage + \else + \clearpage + \fi + \thispagestyle{plain}% + \if@twocolumn + \onecolumn + \@tempswatrue + \else + \@tempswafalse + \fi + \null\vfil + \secdef\@part\@spart} + +\def\@part[#1]#2{% + \ifnum \c@secnumdepth >-2\relax + \refstepcounter{part}% + \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}% + \else + \addcontentsline{toc}{part}{#1}% + \fi + \markboth{}{}% + {\centering + \interlinepenalty \@M + \normalfont + \ifnum \c@secnumdepth >-2\relax + \huge\bfseries \partname\nobreakspace\thepart + \par + \vskip 20\p@ + \fi + \Huge \bfseries #2\par}% + \@endpart} +\def\@spart#1{% + {\centering + \interlinepenalty \@M + \normalfont + \Huge \bfseries #1\par}% + \@endpart} +\def\@endpart{\vfil\newpage + \if@twoside + \if@openright + \null + \thispagestyle{empty}% + \newpage + \fi + \fi + \if@tempswa + \twocolumn + \fi} +\newcommand\chapter{ + %\if@openright\cleardoublepage\else\clearpage\fi + %\thispagestyle{plain}% + \global\@topnum\z@ + \@afterindentfalse + \secdef\@chapter\@schapter} +\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}#1}% + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterindenttrue + \@afterheading + \fi} +\def\@makechapterhead#1{% + \vspace*{6\p@} + {%\parindent \z@ + \raggedright \normalfont + \interlinepenalty\@M + \large\bfseries\hspace{0.8cm}\thechapter\space\space #1\par\nobreak + \vskip 6\p@% + }} +\def\@schapter#1{\if@twocolumn + \@topnewpage[\@makeschapterhead{#1}]% + \else + \@makeschapterhead{#1}% + \@afterindenttrue + \@afterheading + \fi} +\def\@makeschapterhead#1{% + \vspace*{8\p@} + {%\parindent \z@ + \raggedright + \normalfont + \interlinepenalty\@M + \large \bfseries #1\par\nobreak + \vskip 8\p@% + }} +\newcommand\section{\@startsection {section}{1}{\parindent}% + {2.0ex \@plus 0.8ex \@minus .2ex}% + {1.2ex \@plus.2ex}% + {\normalfont\bfseries}} +\newcommand\subsection{\@startsection{subsection}{2}{\parindent}% + {1.9ex\@plus 0.6ex \@minus .2ex}% + {0.7ex \@plus .2ex}% + {\normalfont\bfseries}} +\newcommand\subsubsection{\@startsection{subsubsection}{3}{\parindent}% + {1.8ex\@plus 0.4ex \@minus .2ex}% + {0.5ex \@plus .2ex}% + {\normalfont\normalsize\bfseries}} +\newcommand\paragraph{\@startsection{paragraph}{4}{\parindent}% + {0.1ex \@plus.2ex \@minus.2ex}% + {-.2em}% + {\normalfont\normalsize\bfseries}} +\newcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}} + +\newcommand{\hiddensection}[1]{ + \stepcounter{section} + \subsection*{\thesection\hspace{2.0ex \@plus 0.8ex \@minus .2ex}{#1}} + \def\@currentlabel{\csname thesection\endcsname} +} + +\if@twocolumn + \setlength\leftmargini {2em} +\else + \setlength\leftmargini {0pt} +\fi +\leftmargin \leftmargini +\setlength\leftmarginii {40pt} +\setlength\leftmarginiii {1.87em} +\setlength\leftmarginiv {1.7em} +\if@twocolumn + \setlength\leftmarginv {.5em} + \setlength\leftmarginvi {.5em} +\else + \setlength\leftmarginv {1em} + \setlength\leftmarginvi {1em} +\fi +\setlength \labelsep {.5em} +\setlength \labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} +\@beginparpenalty -\@lowpenalty +\@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty +\renewcommand\theenumi{\@arabic\c@enumi} +\renewcommand\theenumii{\@arabic\c@enumii} +\renewcommand\theenumiii{\@alph\c@enumiii} +\renewcommand\theenumiv{\@Alph\c@enumiv} +\newcommand\labelenumi{\theenumi} +\newcommand\labelenumii{\theenumii)} +\newcommand\labelenumiii{(\theenumiii)} +\newcommand\labelenumiv{\theenumiv.} +\renewcommand\p@enumii{\theenumi} +\renewcommand\p@enumiii{\theenumi(\theenumii)} +\renewcommand\p@enumiv{\p@enumiii\theenumiii} +\newcommand\labelitemi{\textbullet} +\newcommand\labelitemii{\normalfont\bfseries \textendash} +\newcommand\labelitemiii{\textasteriskcentered} +\newcommand\labelitemiv{\textperiodcentered} +\newenvironment{description} + {\list{}{\labelwidth\z@ \itemindent-\leftmargin + \let\makelabel\descriptionlabel}} + {\endlist} +\newcommand*\descriptionlabel[1]{\hspace\labelsep + \normalfont\bfseries #1} + +\if@titlepage + \newenvironment{abstract}{% + \titlepage + \null\vfil + \@beginparpenalty\@lowpenalty + \begin{center}% + \bfseries \abstractname + \@endparpenalty\@M + \end{center}}% + {\par\vfil\null\endtitlepage} +\else + \newenvironment{abstract}{% + \if@twocolumn + \section*{\abstractname}% + \else + \small + \begin{center}% + {\bfseries \abstractname\vspace{-.5em}\vspace{\z@}}% + \end{center}% + \quotation + \fi} + {\if@twocolumn\else\endquotation\fi} +\fi + +\newenvironment{verse} + {\let\\\@centercr + \list{}{\itemsep \z@ + \itemindent -1.5em% + \listparindent\itemindent + \rightmargin \leftmargin + \advance\leftmargin 1.5em}% + \item\relax} + {\endlist} +\newenvironment{quotation} + {\list{}{\listparindent 1.5em% + \itemindent \listparindent + \rightmargin \leftmargin + \parsep \z@ \@plus\p@}% + \item\relax} + {\endlist} +\newenvironment{quote} + {\list{}{\rightmargin\leftmargin}% + \item\relax} + {\endlist} +\if@compatibility +\newenvironment{titlepage} + {% + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse\newpage + \fi + \thispagestyle{empty}% + \setcounter{page}\z@ + }% + {\if@restonecol\twocolumn \else \newpage \fi + } +\else +\newenvironment{titlepage} + {% + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse\newpage + \fi + \thispagestyle{empty}% + \setcounter{page}\@ne + }% + {\if@restonecol\twocolumn \else \newpage \fi + \if@twoside\else + \setcounter{page}\@ne + \fi + } +\fi + +\setlength\arraycolsep{5\p@} +\setlength\tabcolsep{6\p@} +\setlength\arrayrulewidth{.4\p@} +\setlength\doublerulesep{2\p@} +\setlength\tabbingsep{\labelsep} +\skip\@mpfootins = \skip\footins +\setlength\fboxsep{3\p@} +\setlength\fboxrule{.4\p@} +\@addtoreset {equation}{chapter} +\renewcommand\theequation + {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@equation} +\newcounter{figure}%[chapter] +\renewcommand \thefigure + {\@arabic\c@figure} +\def\fps@figure{tbp} +\def\ftype@figure{1} +\def\ext@figure{lof} +\def\fnum@figure{\figurename\nobreakspace\thefigure} +\newenvironment{figure} + {\@float{figure}} + {\end@float} +\newenvironment{figure*} + {\@dblfloat{figure}} + {\end@dblfloat} + +\newcounter{table} +\renewcommand\thetable{\apprefix\@arabic\c@table} + +\def\fps@table{tbp} +\def\ftype@table{2} +\def\ext@table{lot} +\def\fnum@table{\tablename\nobreakspace\thetable} +\newenvironment{table} + {\@float{table}} + {\end@float} +\newenvironment{table*} + {\@dblfloat{table}} + {\end@dblfloat} +\newlength\abovecaptionskip +\newlength\belowcaptionskip +\setlength\abovecaptionskip{0\p@} +\setlength\belowcaptionskip{0\p@} + +\usepackage{ifthen} + +\long\def\@makecaption#1#2{% + \ifthenelse{\equal{#1}{\fnum@table}} + { + \sbox\@tempboxa{\bfseries\small #1~--- } + \setlength\@tempdima{\hsize} + \addtolength\@tempdima{-\wd\@tempboxa} + \sbox\@tempboxa{\bfseries #2} + \ifdim\wd\@tempboxa >\@tempdima + \makebox{\bfseries\small #1~--- }\raisebox{8pt} + {\parbox[t]{\@tempdima}{\bfseries\small #2}} + \else + \ifdim\wd\@tempboxa >12pt + \mbox{\bfseries\small #1~--- } + \mbox{\bfseries\small #2} + \else + \mbox{\bfseries\small #1} + \fi + \fi + \vskip 6\p@ + } + { + \vskip -8\p@ + \sbox\@tempboxa{{\bfseries #1 --- \bfseries #2}}% + \ifdim \wd\@tempboxa >\hsize + {\bfseries #1 --- \bfseries #2}\par + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + } +} + +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} +\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal} +\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal} +\newcommand\@pnumwidth{1.55em} +\newcommand\@tocrmarg{2.55em} +\newcommand\@dotsep{4.5} +\setcounter{tocdepth}{1} +\newcommand\tableofcontents{% + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + \chapter*{\centering\contentsname + \@mkboth{% + \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}% + \@starttoc{toc}% + \if@restonecol\twocolumn\fi + } +\newcommand*\l@part[2]{% + \ifnum \c@tocdepth >-2\relax + \addpenalty{-\@highpenalty}% + \addvspace{2.25em \@plus\p@}% + \setlength\@tempdima{3em}% + \begingroup + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth + {\leavevmode + \large \bfseries #1\hfil \hb@xt@\@pnumwidth{\hss #2}}\par + \nobreak + \global\@nobreaktrue + \everypar{\global\@nobreakfalse\everypar{}}% + \endgroup + \fi} + +\newcommand*\l@chapter[2]{% + \ifnum \c@tocdepth >\m@ne + \addpenalty{-\@highpenalty}% + \vskip 0.1em \@plus\p@ + \setlength\@tempdima{1.5em}% + \begingroup + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth + \leavevmode + \advance\leftskip\@tempdima + \hskip -\leftskip + #1\nobreak\dotfill\nobreak\hb@xt@\@pnumwidth{\hss #2}\par + \penalty\@highpenalty + \endgroup + \fi} + +\renewcommand{\@dotsep}{1.2} +\newcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}} +\newcommand*\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}} +\newcommand*\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}} +\newcommand*\l@paragraph{\@dottedtocline{4}{10em}{5em}} +\newcommand*\l@subparagraph{\@dottedtocline{5}{12em}{6em}} + +\newcommand\listoffigures{% + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + \chapter*{\listfigurename}% + \@mkboth{\MakeUppercase\listfigurename}% + {\MakeUppercase\listfigurename}% + \@starttoc{lof}% + \if@restonecol\twocolumn\fi + } +\newcommand*\l@figure{\@dottedtocline{1}{1.5em}{2.3em}} +\newcommand\listoftables{% + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + \chapter*{\listtablename}% + \@mkboth{% + \MakeUppercase\listtablename}% + {\MakeUppercase\listtablename}% + \@starttoc{lot}% + \if@restonecol\twocolumn\fi + } +\let\l@table\l@figure +\newdimen\bibindent +\setlength\bibindent{1.5em} +\newenvironment{thebibliography}[1] + {\chapter*{\mbox{}\hfill\bibname\hfill\mbox{}}% + \addcontentsline{toc}{chapter}{\bibname} + \@mkboth{\MakeUppercase\bibname}{\MakeUppercase\bibname}% + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \@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} +\newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em} +\let\@openbib@code\@empty +\newenvironment{theindex} + {\if@twocolumn + \@restonecolfalse + \else + \@restonecoltrue + \fi + \twocolumn[\@makeschapterhead{\indexname}]% + \@mkboth{\MakeUppercase\indexname}% + {\MakeUppercase\indexname}% + \thispagestyle{plain}\parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \columnseprule \z@ + \columnsep 35\p@ + \let\item\@idxitem} + {\if@restonecol\onecolumn\else\clearpage\fi} +\newcommand\@idxitem{\par\hangindent 40\p@} +\newcommand\subitem{\@idxitem \hspace*{20\p@}} +\newcommand\subsubitem{\@idxitem \hspace*{30\p@}} +\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax} +\renewcommand\footnoterule{% + \kern-3\p@ + \hrule\@width 1\columnwidth + \kern2.6\p@} +\@addtoreset{footnote}{chapter} +\newcommand\@makefntext[1]{% + \parindent 1em% + \noindent + \hb@xt@1.8em{\hss\@makefnmark}#1} +\newcommand\contentsname{Contents} +\newcommand\listfigurename{List of Figures} +\newcommand\listtablename{List of Tables} +\newcommand\bibname{Bibliography} +\newcommand\indexname{Index} +\newcommand\figurename{Figure} +\newcommand\tablename{Table} +\newcommand\partname{Part} +\newcommand\chaptername{Chapter} +\newcommand\appendixname{Appendix} +\newcommand\abstractname{Abstract} +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} + +\setlength\columnsep{10\p@} +\setlength\columnseprule{0\p@} + +\pagestyle{plain} +\pagenumbering{arabic} +\if@twoside +\else + \raggedbottom +\fi +\if@twocolumn + \twocolumn + \sloppy + \flushbottom +\else + \onecolumn +\fi +\endinput +%% +%% End of file `stb.cls'.