init
This commit is contained in:
120
diagrams/ake-server.tex
Normal file
120
diagrams/ake-server.tex
Normal file
@@ -0,0 +1,120 @@
|
||||
\begin{figure}[h!]
|
||||
\centering
|
||||
%\footnotesize % Apply footnotesize to all text
|
||||
\setmsckeyword{}
|
||||
\drawframe{no} % uncomment to not draw a frame
|
||||
\begin{msc}[
|
||||
/msc/title top distance=0cm,
|
||||
/msc/first level height=.1cm,
|
||||
/msc/last level height=0.7cm, % Slightly reduced
|
||||
/msc/head height=0cm,
|
||||
/msc/instance width=0cm,
|
||||
/msc/head top distance=0.5cm,
|
||||
/msc/foot distance=-0.0cm,
|
||||
/msc/instance width=0cm,
|
||||
/msc/every label/.append style = { % extra style for all labels
|
||||
/tikz/fill = white, % paint a white rectangle
|
||||
/tikz/draw = none, % no border
|
||||
/tikz/inner sep = 1pt % a little padding
|
||||
},
|
||||
/msc/condition height=0.1cm, % Reduced condition height
|
||||
]{}
|
||||
%%%%%%%%%%%%%%%%%% CONFIG %%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\setlength{\instwidth}{0\mscunit} % to remove default box below agents
|
||||
\setlength{\instdist}{2.21cm} % default value between agents
|
||||
|
||||
%%%%%%%%%%%%%%%%%% AGENTS %%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\declinst{A}{ % Alice
|
||||
\begin{tabular}[c]{c}
|
||||
Alice (Initiator) \\
|
||||
\end{tabular}
|
||||
}{}
|
||||
\declinst{Server}{ % Alice
|
||||
\begin{tabular}[c]{c}
|
||||
Server \\
|
||||
\end{tabular}
|
||||
}{}
|
||||
\declinst{B}{ % Bob
|
||||
\begin{tabular}[c]{c}
|
||||
Bob (Responder)
|
||||
\end{tabular}
|
||||
}{}
|
||||
|
||||
|
||||
|
||||
\nextlevel[0.25]
|
||||
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\textsf{(pk\textsubscript{A}, sk\textsubscript{A}) = DH\_Gen()} \\
|
||||
\textsf{(spk\textsubscript{A}, ssk\textsubscript{A}) = SignGen()} \\
|
||||
\textsf{sig\_pk\textsubscript{A} = Sign(spk\textsubscript{A}, pk\textsubscript{A})}
|
||||
\end{tabular}
|
||||
}{A}
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\textsf{(pk\textsubscript{B}, sk\textsubscript{B}) = DH\_Gen()} \\
|
||||
\textsf{(spk\textsubscript{B}, ssk\textsubscript{B}) = SignGen()} \\
|
||||
\textsf{sig\_pk\textsubscript{B} = Sign(spk\textsubscript{B}, pk\textsubscript{B})}
|
||||
\end{tabular}
|
||||
}{B}
|
||||
|
||||
\nextlevel[3]
|
||||
|
||||
\condition{{{\footnotesize out-of-band verification of \textsf{spk\textsubscript{A}, spk\textsubscript{B}}}}}{B,A,Server}
|
||||
|
||||
%\nextlevel[2.5]
|
||||
%\mess{\footnotesize\textsf{spk\textsubscript{A}, sig\_pk\textsubscript{A}, pk\textsubscript{A}}}{A}{B}
|
||||
\nextlevel[2.5]
|
||||
\mess{\footnotesize\textsf{spk\textsubscript{B}, sig\_pk\textsubscript{B}, pk\textsubscript{B}}}{B}{Server}
|
||||
|
||||
\nextlevel[1.25]
|
||||
|
||||
\mess{\footnotesize Request pre-keys}{A}{Server}
|
||||
\nextlevel[1.25]
|
||||
|
||||
|
||||
\mess{\footnotesize\textsf{spk\textsubscript{B}, sig\_pk\textsubscript{B}, pk\textsubscript{B}}}{Server}{A}
|
||||
|
||||
\nextlevel[0.75]
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\textsf{if CheckSign(spk\textsubscript{B}, pk\textsubscript{B}, sig\_pk\textsubscript{B})} \\
|
||||
\textsf{key = DH(sk\textsubscript{A}, pk\textsubscript{B})}
|
||||
\end{tabular}
|
||||
}{A}
|
||||
|
||||
\nextlevel[3.15]
|
||||
|
||||
% \mess{\footnotesize\textsf{spk\textsubscript{A}, sig\_pk\textsubscript{A}, pk\textsubscript{A}}}{A}{B}
|
||||
% \mess{\footnotesize\raisebox{-0.5ex}\colorbox{white}{\textsf{spk\textsubscript{A}, sig\_pk\textsubscript{A}, pk\textsubscript{A}}}}{A}{B}
|
||||
|
||||
\mess{%
|
||||
\smash{\raisebox{-0.05ex}{\makebox[0pt]{%
|
||||
\colorbox{white}{\footnotesize\textsf{spk\textsubscript{A}, sig\_pk\textsubscript{A}, pk\textsubscript{A}}}%
|
||||
}}}
|
||||
}{A}{B}
|
||||
|
||||
\nextlevel[0.5]
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\textsf{if CheckSign(spk\textsubscript{A}, pk\textsubscript{A}, sig\_pk\textsubscript{A})} \\
|
||||
\textsf{key = DH(sk\textsubscript{B}, pk\textsubscript{A})}
|
||||
\end{tabular}
|
||||
}{B}
|
||||
|
||||
\nextlevel[1]
|
||||
|
||||
\end{msc}
|
||||
\caption{An example workflow of asynchronous authenticated key exchange. Bob, the responder, uploads his pre-key material ({\footnotesize\textsf{spk\textsubscript{B}, sig\_pk\textsubscript{B}, pk\textsubscript{B}}}) to the server. Alice, the initiator, fetches Bob's key material from the central server at her leasure, and initiates the authenticated key exchange and \textsf{DH} key agreement}
|
||||
|
||||
\end{figure}
|
||||
|
||||
85
diagrams/ake.tex
Normal file
85
diagrams/ake.tex
Normal file
@@ -0,0 +1,85 @@
|
||||
\begin{figure}[h!]
|
||||
\centering
|
||||
%\footnotesize % Apply footnotesize to all text
|
||||
\setmsckeyword{}
|
||||
\drawframe{no} % uncomment to not draw a frame
|
||||
\begin{msc}[
|
||||
/msc/title top distance=0cm,
|
||||
/msc/first level height=.1cm,
|
||||
/msc/last level height=0.7cm, % Slightly reduced
|
||||
/msc/head height=0cm,
|
||||
/msc/instance width=0cm,
|
||||
/msc/head top distance=0.5cm,
|
||||
/msc/foot distance=-0.0cm,
|
||||
/msc/instance width=0cm,
|
||||
/msc/condition height=0.1cm % Reduced condition height
|
||||
]{}
|
||||
%%%%%%%%%%%%%%%%%% CONFIG %%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\setlength{\instwidth}{0\mscunit} % to remove default box below agents
|
||||
\setlength{\instdist}{4.5cm} % default value between agents
|
||||
|
||||
%%%%%%%%%%%%%%%%%% AGENTS %%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\declinst{A}{ % Alice
|
||||
\begin{tabular}[c]{c}
|
||||
Alice \\
|
||||
\end{tabular}
|
||||
}{}
|
||||
\declinst{B}{ % Bob
|
||||
\begin{tabular}[c]{c}
|
||||
Bob
|
||||
\end{tabular}
|
||||
}{}
|
||||
|
||||
\nextlevel[0.25]
|
||||
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\textsf{(pk\textsubscript{A}, sk\textsubscript{A}) = DH\_Gen()} \\
|
||||
\textsf{(spk\textsubscript{A}, ssk\textsubscript{A}) = SignGen()} \\
|
||||
\textsf{sig\_pk\textsubscript{A} = Sign(spk\textsubscript{A}, pk\textsubscript{A})}
|
||||
\end{tabular}
|
||||
}{A}
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\textsf{(pk\textsubscript{B}, sk\textsubscript{B}) = DH\_Gen()} \\
|
||||
\textsf{(spk\textsubscript{B}, ssk\textsubscript{B}) = SignGen()} \\
|
||||
\textsf{sig\_pk\textsubscript{B} = Sign(spk\textsubscript{B}, pk\textsubscript{B})}
|
||||
\end{tabular}
|
||||
}{B}
|
||||
|
||||
\nextlevel[3]
|
||||
|
||||
\condition{{{\footnotesize out-of-band verification of \textsf{spk\textsubscript{A}, spk\textsubscript{B}}}}}{B,A}
|
||||
|
||||
\nextlevel[2.5]
|
||||
\mess{\footnotesize\textsf{spk\textsubscript{A}, sig\_pk\textsubscript{A}, pk\textsubscript{A}}}{A}{B}
|
||||
\nextlevel[1.25]
|
||||
\mess{\footnotesize\textsf{spk\textsubscript{B}, sig\_pk\textsubscript{B}, pk\textsubscript{B}}}{B}{A}
|
||||
|
||||
\nextlevel[0.75]
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\textsf{if CheckSign(spk\textsubscript{B}, pk\textsubscript{B}, sig\_pk\textsubscript{B})} \\
|
||||
\textsf{key = DH(sk\textsubscript{A}, pk\textsubscript{B})}
|
||||
\end{tabular}
|
||||
}{A}
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\textsf{if CheckSign(spk\textsubscript{A}, pk\textsubscript{A}, sig\_pk\textsubscript{A})} \\
|
||||
\textsf{key = DH(sk\textsubscript{B}, pk\textsubscript{A})}
|
||||
\end{tabular}
|
||||
}{B}
|
||||
|
||||
\nextlevel[1]
|
||||
|
||||
\end{msc}
|
||||
\end{figure}
|
||||
|
||||
30
diagrams/fail-cases.tex
Normal file
30
diagrams/fail-cases.tex
Normal file
@@ -0,0 +1,30 @@
|
||||
\begin{table}[h]
|
||||
\footnotesize
|
||||
\centering
|
||||
\begin{tabularx}{\columnwidth}{l!{\color{black!70}\vrule width 0.4pt\hspace{0.5em}}cccccc}
|
||||
\toprule
|
||||
\textbf{Compromise Scenario} & \textbf{P2} & \textbf{P3} & \textbf{P4} & \textbf{P5} & \textbf{P6} & \textbf{P7} \\
|
||||
& \textit{Secr.} & \textit{Auth.} & \textit{Deni.} & \textit{PFS} & \textit{PCS} & \textit{S-Deni.} \\
|
||||
\midrule
|
||||
\multicolumn{7}{l}{\textit{Megolm}} \\
|
||||
C1: Fan-out ratchet key & \ding{55} & \ding{51} & \ding{51} & \ding{51} & \ding{51} & \ding{51} \\
|
||||
C2: Fan-out public signing key & \ding{51} & \ding{51} & \ding{55} & \ding{51} & \ding{51} & \ding{55} \\
|
||||
C3: Fan-out private signing key & \ding{51} & \ding{51}$^*$ & \ding{55} & \ding{51} & \ding{51} & \ding{55} \\
|
||||
C4: Complete fan-out session & \ding{55} & \ding{55} & \ding{55} & \ding{51} & \ding{51} & \ding{55} \\
|
||||
C5: P2P identity keys (mutual) & \ding{51} & \ding{51} & \ding{51} & \ding{51} & \ding{51} & \ding{51} \\
|
||||
C6: P2P chain key & \ding{55} & \ding{55} & \ding{55} & \ding{51} & \ding{51} & \ding{55} \\
|
||||
C7: P2P pre-key + identity & \ding{55} & \ding{55} & \ding{55} & \ding{51} & \ding{51} & \ding{55} \\
|
||||
\midrule
|
||||
\multicolumn{7}{l}{\textit{Sender Keys}} \\
|
||||
C1: Fan-out ratchet key & \ding{55} & \ding{51} & \ding{51} & \ding{51} & \ding{51} & \ding{51} \\
|
||||
C2: Fan-out public signing key & \ding{51} & \ding{51} & \ding{55} & \ding{51} & \ding{51} & \ding{55} \\
|
||||
C3: Fan-out private signing key & \ding{51} & \ding{55} & \ding{55} & \ding{51} & \ding{51} & \ding{55} \\
|
||||
C4: Complete fan-out session & \ding{55} & \ding{55} & \ding{55} & \ding{51} & \ding{51} & \ding{55} \\
|
||||
C5: P2P identity keys (mutual) & \ding{51} & \ding{51} & \ding{51} & \ding{51} & \ding{51} & \ding{51} \\
|
||||
C6: P2P chain key & \ding{55} & \ding{55} & \ding{55} & \ding{51} & \ding{51} & \ding{55} \\
|
||||
C7: P2P pre-key + identity & \ding{55} & \ding{55} & \ding{55} & \ding{51} & \ding{51} & \ding{55} \\
|
||||
\bottomrule
|
||||
\end{tabularx}
|
||||
\caption{Security property preservation under compromise scenarios. \ding{51} = property maintained, \ding{55} = property violated. $^*$Megolm maintains authentication in C3 due to MAC verification, unlike Sender Keys which relies solely on signatures. P2: Message Secrecy, P3: Authentication, P4: Deniability, P5: Perfect Forward Secrecy, P6: Post-Compromise Security, P7: Strong Deniability. ``P1: Reachability'' remains all true for all cases, and ``P2: Mutual Deniability'' remains false for all cases, thus both properties are not included in the table.}
|
||||
\label{tab:failure-comparison}
|
||||
\end{table}
|
||||
331
diagrams/megolm.tex
Normal file
331
diagrams/megolm.tex
Normal file
@@ -0,0 +1,331 @@
|
||||
\newcommand{\ts}[1]{\textsubscript{#1}}
|
||||
% \newcommand{\sf}[1]{\textsf{#1}}
|
||||
|
||||
\begin{figure*}[h!]
|
||||
\centering
|
||||
%\footnotesize % Apply footnotesize to all text
|
||||
\setmsckeyword{}
|
||||
\drawframe{no} % uncomment to not draw a frame
|
||||
\begin{msc}[
|
||||
/msc/title top distance=0cm,
|
||||
/msc/first level height=.1cm,
|
||||
/msc/last level height=0.7cm, % Slightly reduced
|
||||
/msc/head height=0cm,
|
||||
/msc/instance width=0cm,
|
||||
/msc/head top distance=0.5cm,
|
||||
/msc/foot distance=-0.0cm,
|
||||
/msc/instance width=0cm,
|
||||
/msc/every label/.append style = { % extra style for all labels
|
||||
/tikz/fill = white, % paint a white rectangle
|
||||
/tikz/draw = none, % no border
|
||||
/tikz/inner sep = 1pt % a little padding
|
||||
},
|
||||
/msc/condition height=0.1cm, % Reduced condition height
|
||||
]{}
|
||||
%%%%%%%%%%%%%%%%%% CONFIG %%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\setlength{\instwidth}{0\mscunit} % to remove default box below agents
|
||||
\setlength{\instdist}{6cm} % default value between agents
|
||||
|
||||
%%%%%%%%%%%%%%%%%% AGENTS %%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\declinst{A}{ % Alice
|
||||
\begin{tabular}[c]{c}
|
||||
Alice (Initiator) \\
|
||||
\end{tabular}
|
||||
}{}
|
||||
\declinst{Server}{ % Alice
|
||||
\begin{tabular}[c]{c}
|
||||
Server \\
|
||||
\end{tabular}
|
||||
}{}
|
||||
\declinst{B}{ % Bob
|
||||
\begin{tabular}[c]{c}
|
||||
Bob (Responder)
|
||||
\end{tabular}
|
||||
}{}
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\text{// Begin P2P-layer operations} \\
|
||||
\textsf{(opk\ts{A}, osk\ts{A}) = X25519\_Gen()} \\
|
||||
\textsf{eph\_pk\ts{A}, eph\_sk\ts{A} = X25519\_Gen()} \\
|
||||
\textsf{sig\_eph\_pk\ts{A} = Sign(opk\ts{A}, eph\_pk\ts{A})} \\
|
||||
\end{tabular}
|
||||
}{A}
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\textsf{(opk\ts{B}, osk\ts{B}) = X25519\_Gen()} \\
|
||||
\textsf{eph\_pk\ts{B}, eph\_sk\ts{B} = X25519\_Gen()} \\
|
||||
\textsf{sig\_eph\_pk\ts{B} = Sign(opk\ts{B}, eph\_pk\ts{B})} \\
|
||||
\end{tabular}
|
||||
}{B}
|
||||
|
||||
% \action*{
|
||||
% \footnotesize
|
||||
% \begin{tabular}{@{}l@{}}
|
||||
% \textsf{(opk\textsubscript{A}, osk\textsubscript{A}) = X25519\_Gen()} \\
|
||||
% \end{tabular}
|
||||
% }{B}
|
||||
|
||||
|
||||
\nextlevel[4.4]
|
||||
|
||||
|
||||
\condition{{{\footnotesize out-of-band mutual verification of \textsf{opk\textsubscript{A}, opk\textsubscript{B}}}}}{B,A,Server}
|
||||
|
||||
\nextlevel[2.3]
|
||||
|
||||
\mess{
|
||||
\footnotesize
|
||||
\textsf{
|
||||
opk\ts{B}, sig\_eph\_pk\ts{B}
|
||||
}
|
||||
}{B}{Server}
|
||||
|
||||
\nextlevel[1]
|
||||
|
||||
\mess{
|
||||
\footnotesize
|
||||
Alice requests Bob's pre-keys
|
||||
}{A}{Server}
|
||||
|
||||
\nextlevel[1.5]
|
||||
|
||||
\mess{
|
||||
\footnotesize
|
||||
\textsf{
|
||||
opk\ts{B}, eph\_pk\ts{B}, sig\_eph\_pk\ts{B}
|
||||
}
|
||||
}{Server}{A}
|
||||
|
||||
\nextlevel[1]
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\textsf{If CheckSign(opk\ts{B}, eph\_pk\ts{B}, sig\_eph\_pk\ts{B}):} \\
|
||||
\textsf{key1 = DH(osk\ts{A}, opk\ts{B})} \\
|
||||
\textsf{key2 = DH(eph\_sk\ts{A}, eph\_pk\ts{B})} \\
|
||||
\textsf{key3 = DH(eph\_sk\ts{A}, opk\ts{B})} \\
|
||||
\textsf{master\ts{A} = Concat(key1, key2, key3)} \\
|
||||
\textsf{r1\ts{A}, c1\ts{A} = HKDF(master\ts{A})} \\
|
||||
\textsf{(t1\_pk\ts{A}, t1\_sk\ts{A}) = DH\_Gen()} \\
|
||||
\end{tabular}
|
||||
}{A}
|
||||
|
||||
\nextlevel[6.5]
|
||||
|
||||
\mess{
|
||||
\footnotesize
|
||||
\textsf{
|
||||
opk\ts{A}, eph\_pk\ts{A}, sig\_eph\_pk\ts{A}
|
||||
}
|
||||
}{A}{Server}
|
||||
|
||||
\mess{
|
||||
\footnotesize
|
||||
\textsf{
|
||||
opk\ts{A}, eph\_pk\ts{A}, sig\_eph\_pk\ts{A}
|
||||
}
|
||||
}{Server}{B}
|
||||
|
||||
\nextlevel[1]
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\text{// Begin fan-out layer operations} \\
|
||||
% \textit{generates} \textsf{m1}, \textsf{symkey\ts{A0}} \\
|
||||
\textit{generates} \textsf{symkey\ts{A0}} \\
|
||||
\textsf{ssk\_pk\ts{A}, ssk\_sk\ts{A} = SignGen()} \\
|
||||
\textsf{session\ts{A} = Encrypt(r1\ts{A}, Concat(ssk\_pk\ts{A}, symkey\ts{A0}))} \\
|
||||
\textsf{session\_mac\ts{A} = MAC(r1\ts{A}, session\ts{A}) } \\
|
||||
% \textsf{symkey\textsubscript{A1}} $\leftarrow$ \textsf{
|
||||
% Hash(symkey\textsubscript{A0})
|
||||
% }\\
|
||||
% \textsf{x1 = Encrypt(symkey\textsubscript{A1}, m1)} \\
|
||||
% \textsf{x1\_sig = Sign(pk\textsubscript{A}, x1)}
|
||||
\end{tabular}
|
||||
}{A}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\textsf{If CheckSign(opk\ts{A}, eph\_pk\ts{A}, sig\_eph\_pk\ts{A}):} \\
|
||||
\textsf{key1 = DH(osk\ts{B}, opk\ts{A})} \\
|
||||
\textsf{key2 = DH(eph\_sk\ts{B}, eph\_pk\ts{A})} \\
|
||||
\textsf{key3 = DH(eph\_sk\ts{B}, opk\ts{A})} \\
|
||||
\textsf{master\ts{B} = Concat(key1, key2, key3)} \\
|
||||
\textsf{r1\ts{B}, c1\ts{B} = HKDF(master\ts{B})} \\
|
||||
\textsf{(t1\_pk\ts{B}, t1\_sk\ts{B}) = DH\_Gen()} \\
|
||||
\end{tabular}
|
||||
}{B}
|
||||
|
||||
\nextlevel[6.5]
|
||||
|
||||
\mess{
|
||||
\footnotesize
|
||||
\textsf{
|
||||
session\ts{A}, session\_mac\ts{A}
|
||||
}
|
||||
}{A}{Server}
|
||||
|
||||
|
||||
\mess{
|
||||
\footnotesize
|
||||
\textsf{
|
||||
session\ts{A}, session\_mac\ts{A}
|
||||
}
|
||||
}{Server}{B}
|
||||
|
||||
\nextlevel[1]
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\textsf{if CheckMac(r1\ts{B}, session\ts{A}, session\_mac\ts{A}):} \\
|
||||
\textsf{ssk\_pk\ts{A}, symkey\ts{A0} = Decrypt(r1\ts{A}, session\ts{A})} \\
|
||||
% \textsf{session\_mac\ts{A} = MAC(r1\ts{A}, session\ts{A}) } \\
|
||||
% \textsf{symkey\textsubscript{A1}} $\leftarrow$ \textsf{
|
||||
% Hash(symkey\textsubscript{A0})
|
||||
% }\\
|
||||
% \textsf{x1 = Encrypt(symkey\textsubscript{A1}, m1)} \\
|
||||
% \textsf{x1\_sig = Sign(pk\textsubscript{A}, x1)}
|
||||
\end{tabular}
|
||||
}{B}
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\textit{generates} \textsf{m1} \\
|
||||
% \textit{generates} \textsf{symkey\ts{A0}} \\
|
||||
% \textsf{ssk\_pk\ts{A}, ssk\_sk\ts{A} = SignGen()} \\
|
||||
% \textsf{session\ts{A} = Encrypt(r1\ts{A}, Concat(ssk\_pk\ts{A}, symkey\ts{A0}))} \\
|
||||
% \textsf{session\_mac\ts{A} = MAC(r1\ts{A}, session\ts{A}) } \\
|
||||
\textsf{symkey\textsubscript{A1}} $\leftarrow$ \textsf{
|
||||
Hash(symkey\textsubscript{A0})
|
||||
}\\
|
||||
\textsf{x1 = Encrypt(symkey\textsubscript{A1}, m1)} \\
|
||||
\textsf{x1\_sig = Sign(ssk\_sk\ts{A}, x1)}
|
||||
\end{tabular}
|
||||
}{A}
|
||||
|
||||
\nextlevel[4]
|
||||
|
||||
\mess{
|
||||
\footnotesize
|
||||
\textsf{
|
||||
x1, x1\_sig
|
||||
}
|
||||
}{A}{Server}
|
||||
|
||||
|
||||
|
||||
\mess{
|
||||
\footnotesize
|
||||
server-side fan-out:
|
||||
\textsf{
|
||||
x1, x1\_sig
|
||||
}
|
||||
}{Server}{B}
|
||||
|
||||
\nextlevel[1]
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\textsf{if CheckSign(ssk\_pk\ts{A}, x1, x1\_sig):} \\
|
||||
\textsf{symkey\textsubscript{A1}} $\leftarrow$ \textsf{
|
||||
Hash(symkey\textsubscript{A0})
|
||||
}\\
|
||||
\textsf{m1 = Decrypt(symkey\textsubscript{A1}, x1)} \\
|
||||
\end{tabular}
|
||||
}{B}
|
||||
|
||||
|
||||
\nextlevel[2]
|
||||
|
||||
|
||||
|
||||
% \condition{{\footnotesize Secure channel establishment via AKE}}{B,A}
|
||||
|
||||
% \nextlevel[2.25]
|
||||
|
||||
% \mess{
|
||||
% \footnotesize
|
||||
% \textsf{
|
||||
% pk\textsubscript{A}, symkey\textsubscript{A0}
|
||||
% }
|
||||
% }{A}{B}
|
||||
|
||||
% \nextlevel[0.6]
|
||||
|
||||
% \action*{
|
||||
% \footnotesize
|
||||
% \begin{tabular}{@{}l@{}}
|
||||
% \textit{generates} \textsf{m1} \\
|
||||
% \textsf{symkey\textsubscript{A1}} $\leftarrow$ \textsf{
|
||||
% Hash(symkey\textsubscript{A0})
|
||||
% }\\
|
||||
% % \textsf{x1 = Encrypt(symkey\textsubscript{A1}, m1)} \\
|
||||
% % \textsf{x1\_sig = Sign(pk\textsubscript{A}, x1)}
|
||||
% \end{tabular}
|
||||
% }{A}
|
||||
|
||||
% \nextlevel[4.4]
|
||||
|
||||
% \mess{
|
||||
% \footnotesize
|
||||
% (server-side fan-out)
|
||||
% \textsf{
|
||||
% x1, x1\_sig
|
||||
% }
|
||||
% }{A}{B}
|
||||
|
||||
% \nextlevel[0.6]
|
||||
|
||||
% \action*{
|
||||
% \footnotesize
|
||||
% \begin{tabular}{@{}l@{}}
|
||||
% \textsf{if CheckSign(sk\textsubscript{A}, x1\_sig))} \\
|
||||
% \textsf{symkey\textsubscript{A1}} $\leftarrow$ \textsf{Hash(symkey\textsubscript{A0})} \\
|
||||
% \textsf{m1 = Decrypt(symkey\textsubscript{A1}, x1)}
|
||||
% % \textit{generates} \textsf{m1} \\
|
||||
% % \textsf{symkey\textsubscript{A1}} $\leftarrow$ \textsf{
|
||||
% % Hash(symkey\textsubscript{A0})
|
||||
% % }\\
|
||||
% % \textsf{x1 = Encrypt(symkey\textsubscript{A1}, m1)} \\
|
||||
% % \textsf{x1\_sig = Sign(pk\textsubscript{A}, x1)}
|
||||
% \end{tabular}
|
||||
% }{B}
|
||||
|
||||
% \action*{
|
||||
% \footnotesize
|
||||
% \begin{tabular}{@{}l@{}}
|
||||
|
||||
% \textsf{if CheckSign(sk\textsubscript{A}, x1\_sig))} \\
|
||||
% \textsf{symkey\textsubscript{A1}} $\leftarrow$ \textsf{Hash(symkey\textsubscript{A0})} \\
|
||||
% \textsf{m1 = Decrypt(symkey\textsubscript{A1}, x1)} \\
|
||||
% % \textsf{(pk\textsubscript{B}, sk\textsubscript{B}) = DH\_Gen()} \\
|
||||
% % \textsf{(spk\textsubscript{B}, ssk\textsubscript{B}) = SignGen()} \\
|
||||
% % \textsf{sig\_pk\textsubscript{B} = Sign(spk\textsubscript{B}, pk\textsubscript{B})}
|
||||
% \end{tabular}
|
||||
% }{B}
|
||||
|
||||
|
||||
|
||||
\end{msc}
|
||||
|
||||
\caption{
|
||||
An example instantiation of the nested ratchet protocol using 3DH as the pairwise ratcheting channel. In this example, Alice, the initiator, asynchronously establishes a shared secret with Bob, the responder, via 3DH. Alice then transmits her fan-out layer session, including her ratchet key \textsf{symkey\ts{A0}} and session public key \textsf{ssk\_pk\ts{A}}, using the established secure 3DH channel. Alice follows this by sending Bob her first message, encrypted and signed using her session, and fanned out by the server to all receivers, including Bob. We note the above handshake may be equivalently condensed into just a 3-way handshake; however, for the sake of example, we make explicit the transmission of the 3DH material, session material, and message material. Specified notation for cryptographic primitives, as well as their respective descriptions, are elaborated upon in Table \ref{tab:symbols}.
|
||||
}
|
||||
\label{fig:megolm}
|
||||
|
||||
\end{figure*}
|
||||
|
||||
25
diagrams/related.tex
Normal file
25
diagrams/related.tex
Normal file
@@ -0,0 +1,25 @@
|
||||
\newcommand{\extindent}{~\extension}
|
||||
\begin{table*}[ht!]
|
||||
\scriptsize
|
||||
\centering
|
||||
\rowcolors{2}{gray!10}{white}
|
||||
\setlength{\tabcolsep}{1pt}
|
||||
\begin{tabular}{L{2.0cm} X{0.4cm} | C{1.5cm} C{1.5cm} C{1.5cm} C{1.5cm} C{1.5cm} C{1.5cm} C{1.5cm} C{1.5cm} C{1.5cm} C{1.5cm}}
|
||||
\multicolumn{2}{c|}{Work} & Megolm & Sender Keys & Secrecy & Auth & PCS & PFS & Deniability & Symbolic & Computational & Mechanized
|
||||
\\
|
||||
\hline
|
||||
%\hhline{==|======}
|
||||
$\text{Balbas et al.}$ & \cite{Balbas_SK} & \emptyc & \fullc & \fullc & \fullc & \fullc & \fullc & \emptyc & \emptyc & \fullc & \emptyc \\
|
||||
%
|
||||
$\text{Albrecht et al. 2023}$ & \cite{Albrecht_Dowling_Jones} & \fullc & \emptyc & \fullc & \fullc & \emptyc & \emptyc & \emptyc & \emptyc & \fullc & \emptyc \\
|
||||
%
|
||||
$\text{Albrecht et al. 2025}$ & \cite{Albrecht_2025} & \emptyc & \fullc & \fullc & \fullc & \fullc & \fullc & \emptyc & \emptyc & \fullc & \emptyc \\
|
||||
%
|
||||
$\text{Ours}$ & & \fullc & \fullc & \fullc & \fullc & \fullc & \fullc & \fullc & \fullc & \emptyc & \fullc \\
|
||||
\end{tabular}\smallskip
|
||||
|
||||
\caption{Overview of related works that study nested ratchet protocols,
|
||||
including Megolm (underpinning Matrix) and Sender Keys (underpinning WhatsApp). We include a comparison with our own work.}
|
||||
\label{tab:symbolic-tools}
|
||||
\end{table*}
|
||||
|
||||
126
diagrams/session-trans.tex
Normal file
126
diagrams/session-trans.tex
Normal file
@@ -0,0 +1,126 @@
|
||||
\begin{figure}[h!]
|
||||
\centering
|
||||
%\footnotesize % Apply footnotesize to all text
|
||||
\setmsckeyword{}
|
||||
\drawframe{no} % uncomment to not draw a frame
|
||||
\begin{msc}[
|
||||
/msc/title top distance=0cm,
|
||||
/msc/first level height=.1cm,
|
||||
/msc/last level height=0.7cm, % Slightly reduced
|
||||
/msc/head height=0cm,
|
||||
/msc/instance width=0cm,
|
||||
/msc/head top distance=0.5cm,
|
||||
/msc/foot distance=-0.0cm,
|
||||
/msc/instance width=0cm,
|
||||
/msc/every label/.append style = { % extra style for all labels
|
||||
/tikz/fill = white, % paint a white rectangle
|
||||
/tikz/draw = none, % no border
|
||||
/tikz/inner sep = 1pt % a little padding
|
||||
},
|
||||
/msc/condition height=0.1cm, % Reduced condition height
|
||||
]{}
|
||||
%%%%%%%%%%%%%%%%%% CONFIG %%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\setlength{\instwidth}{0\mscunit} % to remove default box below agents
|
||||
\setlength{\instdist}{4cm} % default value between agents
|
||||
|
||||
%%%%%%%%%%%%%%%%%% AGENTS %%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\declinst{A}{ % Alice
|
||||
\begin{tabular}[c]{c}
|
||||
Alice \\
|
||||
\end{tabular}
|
||||
}{}
|
||||
% \declinst{Server}{ % Alice
|
||||
% \begin{tabular}[c]{c}
|
||||
% Server \\
|
||||
% \end{tabular}
|
||||
% }{}
|
||||
\declinst{B}{ % Bob
|
||||
\begin{tabular}[c]{c}
|
||||
Bob
|
||||
\end{tabular}
|
||||
}{}
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\textit{generates} \textsf{symkey\textsubscript{A0}} \\
|
||||
\textsf{(pk\textsubscript{A}, sk\textsubscript{A}) = DH\_Gen()}
|
||||
\end{tabular}
|
||||
}{A}
|
||||
|
||||
\nextlevel[2.3]
|
||||
|
||||
\condition{{\footnotesize Secure channel establishment via AKE}}{B,A}
|
||||
|
||||
\nextlevel[2.25]
|
||||
|
||||
\mess{
|
||||
\footnotesize
|
||||
\textsf{
|
||||
pk\textsubscript{A}, symkey\textsubscript{A0}
|
||||
}
|
||||
}{A}{B}
|
||||
|
||||
\nextlevel[0.6]
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\textit{generates} \textsf{m1} \\
|
||||
\textsf{symkey\textsubscript{A1}} $\leftarrow$ \textsf{
|
||||
Hash(symkey\textsubscript{A0})
|
||||
}\\
|
||||
\textsf{x1 = Encrypt(symkey\textsubscript{A1}, m1)} \\
|
||||
\textsf{x1\_sig = Sign(pk\textsubscript{A}, x1)}
|
||||
\end{tabular}
|
||||
}{A}
|
||||
|
||||
\nextlevel[4.4]
|
||||
|
||||
\mess{
|
||||
\footnotesize
|
||||
(server-side fan-out)
|
||||
\textsf{
|
||||
x1, x1\_sig
|
||||
}
|
||||
}{A}{B}
|
||||
|
||||
\nextlevel[0.6]
|
||||
|
||||
\action*{
|
||||
\footnotesize
|
||||
\begin{tabular}{@{}l@{}}
|
||||
\textsf{if CheckSign(sk\textsubscript{A}, x1\_sig))} \\
|
||||
\textsf{symkey\textsubscript{A1}} $\leftarrow$ \textsf{Hash(symkey\textsubscript{A0})} \\
|
||||
\textsf{m1 = Decrypt(symkey\textsubscript{A1}, x1)}
|
||||
% \textit{generates} \textsf{m1} \\
|
||||
% \textsf{symkey\textsubscript{A1}} $\leftarrow$ \textsf{
|
||||
% Hash(symkey\textsubscript{A0})
|
||||
% }\\
|
||||
% \textsf{x1 = Encrypt(symkey\textsubscript{A1}, m1)} \\
|
||||
% \textsf{x1\_sig = Sign(pk\textsubscript{A}, x1)}
|
||||
\end{tabular}
|
||||
}{B}
|
||||
|
||||
% \action*{
|
||||
% \footnotesize
|
||||
% \begin{tabular}{@{}l@{}}
|
||||
|
||||
% \textsf{if CheckSign(sk\textsubscript{A}, x1\_sig))} \\
|
||||
% \textsf{symkey\textsubscript{A1}} $\leftarrow$ \textsf{Hash(symkey\textsubscript{A0})} \\
|
||||
% \textsf{m1 = Decrypt(symkey\textsubscript{A1}, x1)} \\
|
||||
% % \textsf{(pk\textsubscript{B}, sk\textsubscript{B}) = DH\_Gen()} \\
|
||||
% % \textsf{(spk\textsubscript{B}, ssk\textsubscript{B}) = SignGen()} \\
|
||||
% % \textsf{sig\_pk\textsubscript{B} = Sign(spk\textsubscript{B}, pk\textsubscript{B})}
|
||||
% \end{tabular}
|
||||
% }{B}
|
||||
|
||||
|
||||
|
||||
\end{msc}
|
||||
|
||||
\caption{An example workflow of session transmission from Alice to Bob. Alice transmits her session information, including her session's symmetric key {\footnotesize\textsf{symkey\textsubscript{A0}}} and public signing key {\footnotesize\textsf{pk\textsubscript{A}}}. Alice generates a new message {\footnotesize\textsf{m1}}, hashes her session's symmetric key and uses it to encrypt {\footnotesize\textsf{m1}}, signs the ciphertext with {\footnotesize\textsf{sk\textsubscript{A}}}, then sends the ciphertext and signature to the server for server-side fan-out. The recipient, Bob, checks the signature, hashes his copy of the symmetric key, and decrypts.
|
||||
}
|
||||
|
||||
\end{figure}
|
||||
|
||||
Reference in New Issue
Block a user