Skip to content

Commit fc7dc20

Browse files
committed
Обновлён раздел про схему Блома
1 parent 8d1a484 commit fc7dc20

4 files changed

+200
-11
lines changed

protocols/bloms_scheme.tex

+17-11
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,30 @@
11
\subsection{Схема Блома}\label{section-bloms-scheme}\index{схема!Блома|(}
22
\selectlanguage{russian}
33

4-
Рассмотрим распределение ключей по \emph{схеме Блома} (\langen{Rolf Blom},~\cite{Blom:1984, Blom:1985}), в которой каждые два из общего числа $N$ пользователей могут создать общий секретный ключ, причём секретные ключи каждой пары различны. Данная схема используется в протоколе HDCP\index{протокол!HDCP} (\langen{High-bandwidth Digital Content Protection}) для предотвращения копирования высококачественного видеосигнала.
4+
Схема Блома (\langen{Rolf Blom},~\cite{Blom:1984, Blom:1985}) используется в протоколе HDCP\index{протокол!HDCP} (\langen{High-bandwidth Digital Content Protection}) для предотвращения копирования высококачественного видеосигнала. Предполагается, что некоторый доверенный центр распределит ключи таким образом, что легальные производители видеокарт, мониторов высокого разрешения и других компонент будут передавать видеоконтент по защищённому каналу, а <<пиратские>> устройства не смогут эти данные перехватить, и, например, записать на другой носитель.
55

6-
На этапе инициализации доверенный центр выбирает симметричную матрицу $D_{m,m}$ над конечным полем $\GF p$. Для присоединения к сети распространения ключей, новый участник либо самостоятельно, либо с помощью доверенного центра выбирает новый открытый ключ (идентификатор) $I$, представляющий собой вектор длины $m$ над $\GF p$. Доверенный центр вычисляет для нового участника закрытый ключ $K$:
6+
На этапе инициализации доверенный центр выбирает симметричную матрицу $D_{m,m}$ над конечным полем $\GF p$. Для присоединения к сети распространения ключей, новый участник либо самостоятельно, либо с помощью доверенного центра выбирает новый открытый ключ (идентификатор) $I_i$, представляющий собой вектор длины $m$ над $\GF p$. Доверенный центр вычисляет для нового участника закрытый ключ $K_i$:
77
\begin{equation}
8-
K = D_{m,m} I.
8+
K_i = D_{m,m} I_i.
99
\label{eq:blom_center_matrix}
1010
\end{equation}
1111

12-
Симметричность матрицы $D_{m,m}$ доверенного центра позволяет любым двум участникам сети создать общий сеансовый ключ. Пусть Алиса и Боб -- легальные пользователи сети, то есть они обладают открытыми ключами $I_A$ и $I_B$ соответственно, а их закрытые ключи $K_A$ и $K_B$ были вычислены одним и тем же доверенным центром по формуле~\ref{eq:blom_center_matrix}. Тогда протокол выработки общего секретного ключа выглядит следующим образом.
12+
Симметричность матрицы $D_{m,m}$ доверенного центра позволяет любым двум участникам сети создать общий сеансовый ключ. Пусть Алиса и Боб -- легальные пользователи сети, то есть они обладают открытыми ключами $I_A$ и $I_B$ соответственно, а их закрытые ключи $K_A$ и $K_B$ были вычислены одним и тем же доверенным центром по формуле~\ref{eq:blom_center_matrix}. Тогда протокол выработки общего секретного ключа выглядит следующим образом (рис.~\ref{fig:key_distribution-bloms-scheme}).
1313

14-
\begin{enumerate}
15-
\item Алиса отправляет Бобу свой открытый ключ $I_A$.
16-
\item Боб отправляет Алисе свой открытый ключ $I_B$.
17-
\item Алиса вычисляет значение $s_{AB} = K^T_A I_B = I^T_A D_{m,m} I_B$.
18-
\item Боб вычисляет значение $s_{BA} = K^T_B I_A = I^T_B D_{m,m} I_A$.
19-
\end{enumerate}
14+
\begin{figure}
15+
\centering
16+
\includegraphics[width=0.5\textwidth]{pic/key_distribution-bloms-scheme}
17+
\caption{Взаимодействие участников в схеме Блома\label{fig:key_distribution-bloms-scheme}}
18+
\end{figure}
2019

21-
Из симметричности матрицы $D_{m,m}$ следует, что значения $s_{AB}$ и $s_{BA}$ совпадут, они же и будут являться общим секретным ключом для Алисы и Боба. Этот секретный ключ будет свой для каждой пары легальных пользователей сети.
20+
\begin{protocol}
21+
\item[(1)] $Alice \to \left\{ I_A \right\} \to Bob$
22+
\item[(2)] Боб вычисляет $K_{BA} = K^T_B I_A = I^T_B D_{m,m} I_A$.
23+
\item[{}] $Bob \to \left\{ I_B \right\} \to Alice$
24+
\item[(3)] Алиса вычисляет $K_{AB} = K^T_A I_B = I^T_A D_{m,m} I_B$.
25+
\end{protocol}
26+
27+
Из симметричности матрицы $D_{m,m}$ следует, что значения $K_{AB}$ и $K_{BA}$ совпадут, они же и будут являться общим секретным ключом для Алисы и Боба. Этот секретный ключ будет свой для каждой пары легальных пользователей сети.
2228

2329
Присоединение новых участников к схеме строго контролируется доверенным центром, что позволяет защитить сеть от нелегальных пользователей. Надёжность данной схемы основывается на невозможности восстановить исходную матрицу. Однако для восстановления матрицы доверенного центра размера $m \times m$ необходимо и достаточно всего $m$ пар линейно независимых открытых и закрытых ключей. В 2010-м году компания Intel, которая является <<доверенным центром>> для пользователей системы защиты HDCP, подтвердила, что криптоаналитикам удалось найти секретную матрицу (точнее, аналогичную ей), используемую для генерации ключей в упомянутой системе предотвращения копирования высококачественного видеосигнала.
2430

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+
<!--Created by yFiles for HTML 2.2.0.2-->
3+
<graphml xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml.html/2.0/ygraphml.xsd " xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:demostyle="http://www.yworks.com/yFilesHTML/demos/FlatDemoStyle/1.0" xmlns:bpmn="http://www.yworks.com/xml/yfiles-for-html/bpmn/2.0" xmlns:demotablestyle="http://www.yworks.com/yFilesHTML/demos/FlatDemoTableStyle/1.0" xmlns:uml="http://www.yworks.com/yFilesHTML/demos/UMLDemoStyle/1.0" xmlns:compat="http://www.yworks.com/xml/yfiles-compat-arrows/1.0" xmlns:GraphvizNodeStyle="http://www.yworks.com/yFilesHTML/graphviz-node-style/1.0" xmlns:VuejsNodeStyle="http://www.yworks.com/demos/yfiles-vuejs-node-style/1.0" xmlns:y="http://www.yworks.com/xml/yfiles-common/3.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/3.0" xmlns:yjs="http://www.yworks.com/xml/yfiles-for-html/2.0/xaml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4+
<key id="d0" for="node" attr.type="boolean" attr.name="Expanded" y:attr.uri="http://www.yworks.com/xml/yfiles-common/2.0/folding/Expanded">
5+
<default>true</default>
6+
</key>
7+
<key id="d1" for="node" attr.type="string" attr.name="url"/>
8+
<key id="d2" for="node" attr.type="string" attr.name="description"/>
9+
<key id="d3" for="node" attr.name="NodeLabels" y:attr.uri="http://www.yworks.com/xml/yfiles-common/2.0/NodeLabels"/>
10+
<key id="d4" for="node" attr.name="NodeGeometry" y:attr.uri="http://www.yworks.com/xml/yfiles-common/2.0/NodeGeometry"/>
11+
<key id="d5" for="all" attr.name="UserTags" y:attr.uri="http://www.yworks.com/xml/yfiles-common/2.0/UserTags"/>
12+
<key id="d6" for="node" attr.name="NodeStyle" y:attr.uri="http://www.yworks.com/xml/yfiles-common/2.0/NodeStyle"/>
13+
<key id="d7" for="node" attr.name="NodeViewState" y:attr.uri="http://www.yworks.com/xml/yfiles-common/2.0/folding/1.1/NodeViewState"/>
14+
<key id="d8" for="edge" attr.type="string" attr.name="url"/>
15+
<key id="d9" for="edge" attr.type="string" attr.name="description"/>
16+
<key id="d10" for="edge" attr.name="EdgeLabels" y:attr.uri="http://www.yworks.com/xml/yfiles-common/2.0/EdgeLabels"/>
17+
<key id="d11" for="edge" attr.name="EdgeGeometry" y:attr.uri="http://www.yworks.com/xml/yfiles-common/2.0/EdgeGeometry"/>
18+
<key id="d12" for="edge" attr.name="EdgeStyle" y:attr.uri="http://www.yworks.com/xml/yfiles-common/2.0/EdgeStyle"/>
19+
<key id="d13" for="edge" attr.name="EdgeViewState" y:attr.uri="http://www.yworks.com/xml/yfiles-common/2.0/folding/1.1/EdgeViewState"/>
20+
<key id="d14" for="port" attr.name="PortLabels" y:attr.uri="http://www.yworks.com/xml/yfiles-common/2.0/PortLabels"/>
21+
<key id="d15" for="port" attr.name="PortLocationParameter" y:attr.uri="http://www.yworks.com/xml/yfiles-common/2.0/PortLocationParameter">
22+
<default>
23+
<x:Static Member="y:FreeNodePortLocationModel.NodeCenterAnchored"/>
24+
</default>
25+
</key>
26+
<key id="d16" for="port" attr.name="PortStyle" y:attr.uri="http://www.yworks.com/xml/yfiles-common/2.0/PortStyle">
27+
<default>
28+
<x:Static Member="y:VoidPortStyle.Instance"/>
29+
</default>
30+
</key>
31+
<key id="d17" for="port" attr.name="PortViewState" y:attr.uri="http://www.yworks.com/xml/yfiles-common/2.0/folding/1.1/PortViewState"/>
32+
<key id="d18" attr.name="SharedData" y:attr.uri="http://www.yworks.com/xml/yfiles-common/2.0/SharedData"/>
33+
<data key="d18">
34+
<y:SharedData>
35+
<yjs:SolidColorFill x:Key="1" color="Black"/>
36+
<yjs:SolidColorFill x:Key="2" color="Black"/>
37+
<yjs:Arrow x:Key="3" type="NONE"/>
38+
</y:SharedData>
39+
</data>
40+
<graph id="G" edgedefault="directed">
41+
<data key="d5">
42+
<y:Json>{"version":"2.0.0","theme":{"name":"light","version":"1.0.0"}}</y:Json>
43+
</data>
44+
<node id="n0">
45+
<data key="d3">
46+
<x:List>
47+
<y:Label>
48+
<y:Label.Text>A</y:Label.Text>
49+
<y:Label.LayoutParameter>
50+
<y:RatioAnchoredLabelModelParameter LayoutOffset="10.998046875,7.6494140625"/>
51+
</y:Label.LayoutParameter>
52+
<y:Label.Style>
53+
<yjs:DefaultLabelStyle horizontalTextAlignment="CENTER" autoFlip="false" textFill="#FF000000">
54+
<yjs:DefaultLabelStyle.font>
55+
<yjs:Font fontSize="12" fontFamily="'Dialog'"/>
56+
</yjs:DefaultLabelStyle.font>
57+
</yjs:DefaultLabelStyle>
58+
</y:Label.Style>
59+
</y:Label>
60+
</x:List>
61+
</data>
62+
<data key="d4">
63+
<y:RectD X="510" Y="385" Width="30" Height="30"/>
64+
</data>
65+
<data key="d6">
66+
<yjs:ShapeNodeStyle fill="{x:Null}" shape="ELLIPSE">
67+
<yjs:ShapeNodeStyle.stroke>
68+
<yjs:Stroke fill="#FF000000" miterLimit="1.45"/>
69+
</yjs:ShapeNodeStyle.stroke>
70+
</yjs:ShapeNodeStyle>
71+
</data>
72+
<port name="p0">
73+
<data key="d15">
74+
<y:FreeNodePortLocationModelParameter Ratio="0.5101705386666671,0.21321396906666715"/>
75+
</data>
76+
</port>
77+
<port name="p1">
78+
<data key="d15">
79+
<y:FreeNodePortLocationModelParameter Ratio="0.5012226901333331,0.7679805781333339"/>
80+
</data>
81+
</port>
82+
</node>
83+
<node id="n1">
84+
<data key="d3">
85+
<x:List>
86+
<y:Label>
87+
<y:Label.Text>B</y:Label.Text>
88+
<y:Label.LayoutParameter>
89+
<y:RatioAnchoredLabelModelParameter LayoutOffset="10.998046875,7.6494140625"/>
90+
</y:Label.LayoutParameter>
91+
<y:Label.Style>
92+
<yjs:DefaultLabelStyle horizontalTextAlignment="CENTER" autoFlip="false" textFill="#FF000000">
93+
<yjs:DefaultLabelStyle.font>
94+
<yjs:Font fontSize="12" fontFamily="'Dialog'"/>
95+
</yjs:DefaultLabelStyle.font>
96+
</yjs:DefaultLabelStyle>
97+
</y:Label.Style>
98+
</y:Label>
99+
</x:List>
100+
</data>
101+
<data key="d4">
102+
<y:RectD X="610" Y="385" Width="30" Height="30"/>
103+
</data>
104+
<data key="d6">
105+
<yjs:ShapeNodeStyle fill="{x:Null}" shape="ELLIPSE">
106+
<yjs:ShapeNodeStyle.stroke>
107+
<yjs:Stroke fill="#FF000000" miterLimit="1.45"/>
108+
</yjs:ShapeNodeStyle.stroke>
109+
</yjs:ShapeNodeStyle>
110+
</data>
111+
<port name="p0">
112+
<data key="d15">
113+
<y:FreeNodePortLocationModelParameter Ratio="0.5054368597333336,0.21321396906666715"/>
114+
</data>
115+
</port>
116+
<port name="p1">
117+
<data key="d15">
118+
<y:FreeNodePortLocationModelParameter Ratio="0.48754116266666564,0.7679805781333339"/>
119+
</data>
120+
</port>
121+
</node>
122+
<edge id="e0" source="n0" target="n1" sourceport="p0" targetport="p0">
123+
<data key="d9"><![CDATA[]]></data>
124+
<data key="d10">
125+
<x:List>
126+
<y:Label>
127+
<y:Label.Text>1.</y:Label.Text>
128+
<y:Label.LayoutParameter>
129+
<y:FreeEdgeLabelModelParameter Ratio="0.4976555608933971" Distance="-7.0009999999999195"/>
130+
</y:Label.LayoutParameter>
131+
<y:Label.Style>
132+
<yjs:DefaultLabelStyle horizontalTextAlignment="CENTER" textFill="#FF000000">
133+
<yjs:DefaultLabelStyle.font>
134+
<yjs:Font fontSize="12" fontFamily="'Dialog'"/>
135+
</yjs:DefaultLabelStyle.font>
136+
</yjs:DefaultLabelStyle>
137+
</y:Label.Style>
138+
</y:Label>
139+
</x:List>
140+
</data>
141+
<data key="d12">
142+
<yjs:PolylineEdgeStyle sourceArrow="{y:GraphMLReference 3}">
143+
<yjs:PolylineEdgeStyle.stroke>
144+
<yjs:Stroke fill="{y:GraphMLReference 1}" miterLimit="1.45"/>
145+
</yjs:PolylineEdgeStyle.stroke>
146+
<yjs:PolylineEdgeStyle.targetArrow>
147+
<yjs:Arrow stroke="#FF000000" fill="{y:GraphMLReference 1}"/>
148+
</yjs:PolylineEdgeStyle.targetArrow>
149+
</yjs:PolylineEdgeStyle>
150+
</data>
151+
</edge>
152+
<edge id="e1" source="n1" target="n0" sourceport="p1" targetport="p1">
153+
<data key="d9"><![CDATA[]]></data>
154+
<data key="d10">
155+
<x:List>
156+
<y:Label>
157+
<y:Label.Text>2.</y:Label.Text>
158+
<y:Label.LayoutParameter>
159+
<y:FreeEdgeLabelModelParameter Ratio="0.49830763166484143" Distance="-7.0009999999999195"/>
160+
</y:Label.LayoutParameter>
161+
<y:Label.Style>
162+
<yjs:DefaultLabelStyle horizontalTextAlignment="CENTER" textFill="#FF000000">
163+
<yjs:DefaultLabelStyle.font>
164+
<yjs:Font fontSize="12" fontFamily="'Dialog'"/>
165+
</yjs:DefaultLabelStyle.font>
166+
</yjs:DefaultLabelStyle>
167+
</y:Label.Style>
168+
</y:Label>
169+
</x:List>
170+
</data>
171+
<data key="d12">
172+
<yjs:PolylineEdgeStyle sourceArrow="{y:GraphMLReference 3}">
173+
<yjs:PolylineEdgeStyle.stroke>
174+
<yjs:Stroke fill="{y:GraphMLReference 2}" miterLimit="1.45"/>
175+
</yjs:PolylineEdgeStyle.stroke>
176+
<yjs:PolylineEdgeStyle.targetArrow>
177+
<yjs:Arrow stroke="#FF000000" fill="{y:GraphMLReference 2}"/>
178+
</yjs:PolylineEdgeStyle.targetArrow>
179+
</yjs:PolylineEdgeStyle>
180+
</data>
181+
</edge>
182+
</graph>
183+
</graphml>
5.01 KB
Binary file not shown.
Loading

0 commit comments

Comments
 (0)