diff --git a/01-intro/intro.tex b/01-intro/intro.tex
index 26803e07f4da47286a40f795790a1061e528e4dd..1999beb34127980fab29b2b8435e706cbc499ca4 100644
--- a/01-intro/intro.tex
+++ b/01-intro/intro.tex
@@ -235,14 +235,97 @@ Ekonomové odhadují že peněz v~hotovosti a na snadno dostupných účtech
 je cca $8\cdot 10^{12}\;{\rm USD}$. Viz \url{https://www.rankred.com/how-much-money-is-there-in-the-world/}.
 } takže stačí na částku rezervovat 13 číslic a na celou zprávu 20 znaků.
 
-\subsection{Přehrávací útoky: přidáme nonci}
+\subsection{Porovnávání zpráv: přidáme nonci}
 
-\subsection{Porovnávání zpráv: nonce podruhé}
+Překvapivě i po této úpravě z~protokolu prosakují informace: Šifrování je deterministické,
+takže pokud Alice pošle podruhé tentýž příkaz, vznikne stejná zašifrovaná zpráva. Útočník přitom
+vidí v~televizním přenosu, jak Bob zareagoval na kterou zašifrovanou zprávu, takže si může vytvářet
+slovník známých zpráv s~jejich významy.
+
+Pomoc je snadné: Před šifrováním ke zprávě přidáme nějakou nonci, třeba náhodný 64-bitový
+řetězec. Pak už bude velmi nepravděpodobně, že by útočník potkal tutéž zašifrovanou zprávu
+vícekrát.
+
+\subsection{Přehrávací útoky: hodí se sériová čísla}
+
+Co kdyby útočník zkusil nějaké zprávy vyrábět?
+Pokud si nějakou úplně vymyslí, nejspíš po dešifrování nebude dávat smysl. Daleko snazší
+je zopakovat nějakou autentickou zprávu a tím přimět Boba, aby zopakoval jeden z~předchozích
+příkazů.
+
+Nonce už tomu teoretický brání: Bob si může pamatovat množinu všech noncí, které už potkal,
+a~když se nějaká zopakuje, ví, že se jedná o~duplikát zprávy, takže ho bude ignorovat.
+Nepraktické je, že na to potřebuje spoustu paměti. Zprávy proto doplníme \em{sériovým číslem} --
+počáteční zpráva má sériové číslo~0, každá další pak o~1 větší. Bob si pamatuje, jaké poslední
+sériové číslo viděl, a~nová zpráva nemá ostře větší, zahodí ji. (Všimněte si, že nevyžaduje přesně o~1
+vyšší, takže ho nezmate vynechaná zpráva.)
 
 \subsection{Modifikace zpráv: podepisujeme}
 
+Další ošklivost, kterou by nám mohl útočník provádět, je obsah zpráv upravovat.
+Může se zdát, že pokud zašifrovanou zprávu jakkoliv změníme, způsobí to po dešifrování
+naprosté rozbití zprávy. To překvapivě často není pravda a z~obecných požadavků
+na bezpečnost šifer to neplyne. Například pro všechny proudové šifry (TODO) platí, že
+překlopíme-li jeden bit v~zašifrovaném textu, změní se bit na stejné pozici v~dešifrované zprávě.
+
+S~tím se dá tropit nejrůznější neplecha. Především můžeme libovolně měnit sériové číslo:
+jeho původní hodnotu snadno známe (to je počet zpráv od počátku komunikace), takže víme,
+které bity změnit, abychom dostali o~1~vyšší číslo. Tím pádem sériová čísla vůbec nechrání
+proti přehrávání zpráv. Nebo můžeme sériové číslo nahradit nějakým hodně velkým (třeba překlopit
+jeho nejvyšší bit), takže Bob napříště zahodí všechny autentické zprávy od Alice.
+
+Také můžeme upravovat částky. Pokud uhodneme, kolikamístnou částku Alice poslala (to se dá
+podle průběhu dražby tipovat), můžeme následující mezeru změnit na nulu a tím částku vynásobit
+deseti. Navíc první číslice bude často jednička\foot{Pravděpodobně se i zde uplatňuje tzv.
+\linkurl{https://cs.wikipedia.org/wiki/Benford\%C5\%AFv_z\%C3\%A1kon}{Benfordův zákon}.}
+a pokud si to útočník správně tipne, může ji změnit na jakoukoliv jinou číslici.
+
+Konečně můžeme zkusit změnit {\tt PRIHOD} na {\tt KONEC\sp} a tím donutit Boba odejít z~dražby.
+Na to bychom ale potřebovali, aby Bob ignoroval přebytečné číslice za příkazem {\tt KONEC}.
+Nebo pokud bychom uhodli, že Alice chce skončit, mohli bychom naopak z~konce udělat jakékoliv
+přihození.
+
+Všechny tyto problémy jsou důsledkem toho, že šifra nezaručuje nic o~integritě zpráv.
+Přidáme proto ke každé zprávě ještě podpis. Jelikož obě strany už sdílí společné tajemství,
+můžeme podepisovat symetricky, tedy MACem. Podepisovat budeme až zašifrovanou zprávu.
+
 \subsection{Hotový protokol}
 
+Pojďme shrnout celý protokol. Zprávy budou vypadat takto:
+
+\tightlist{o}
+\:zašifrovaná část:
+	\tightlist{o}
+	\:nonce (64 bitů)
+	\:sekvenční číslo (64 bitů)
+	\:text příkazu dopadovaný mezerami na 20 znaků
+	\endlist
+\:podpis zašifrované části
+\endlist
+
+Alice si bude udržovat počítadlo zpráv a podle něj nastavovat sekvenční číslo.
+Nonce bude generovat náhodně.
+
+Bob si bude pamatovat poslední přijaté sekvenční číslo.
+Když mu přijde zpráva, nejdříve ověří podpis a pokud nesouhlasí, zprávu zahodí.
+Jinak zprávu dešifruje, porovná její sekvenční číslo s~posledním přijatým, a~pokud
+nové není větší, zprávu zahodí.
+Pokud zpráva prošla i~tímto textem, Bob ji považuje za autentickou a provede příkaz.
+
 \subsection{Překvapení na závěr}
 
+Alice je spokojená -- vydražila svého milovaného Tuxe všem nepřátelům navzdory.
+Tak se při příští dražbě pokusí osvědčený protokol použít znovu. Ale ouha, nepřátelům
+se najednou daří postrkávat příkazy, které Alice neposílala.
+Co je špatně? Inu, sériová čísla sice brání přehrávání zpráv v~rámci jedné instance protokolu,
+ale už ne kopírování zpráv z~jedné instance protokolu do druhé.
+
+Náprava je snadná: Do každé zprávy přidáme ještě identifikátor instance protokolu
+(třeba datum a čas začátku dražby) a budeme zahazovat všechny zprávy, které nepatří
+k~aktuální instanci.
+
+Identifikátory instance dokonce ani nemusíme posílat -- stačí, když je započítáme
+do podpisu. Jakmile se pak objeví zpráva z~jiné instance, prostě jí nebude souhlasit
+podpis.
+
 \endchapter