Modulárna aritmetika predstavuje jeden zo základných stavebných kameňov aplikovanej matematiky a je neoceniteľná v oblasti kryptografie. Tento projekt sa zaoberá implementáciou a analýzou dvoch klasických šifrovacích metód — Caesarovej a Vigenèrovej šifry — v programovacom prostredí R. Základy efektívnej manipulácie s dátami v tomto prostredí vychádzajú z metodických postupov, ktoré popisuje Bacigál (2022).
Cieľom je demonštrovať praktickú aplikáciu teoretických matematických konceptov a ukázať, ako jednoduché operácie modulo vedú k vytvoreniu funkčných šifrovacích systémov.
2 Teoretické pozadie
Teoretické základy klasickej kryptografie, symetrických šifier a ich historický kontext podrobne rozoberá vo svojej práci Stallings (2020).
2.1 Modulárna aritmetika
Dve celé čísla \(a\) a \(b\) sú kongruentné modulo \(n\), ak platí: \[a \equiv b \pmod{n} \quad \Leftrightarrow \quad n \mid (a-b)\]
2.2 Caesarova šifra
Každé písmeno abecedy (A–Z) je reprezentované číslom \(0\) až \(25\). Šifrovanie prebieha podľa vzorca: \[E(x) = (x + k) \mod 26\]
2.3 Vigenèrova šifra
Používa kľúčové slovo, ktoré definuje rôzne posuny pre jednotlivé písmená: \[E(x_i) = (x_i + k_{i \mod m}) \mod 26\] kde \(m\) je dĺžka kľúča.
V tejto časti demonštrujeme aplikáciu vytvorených funkcií na konkrétnych textových údajoch a analyzujeme vplyv šifrovania na distribúciu znakov. Príklad výpočtu a transformácie je znázornený v Table 1.
Code
text <-"PINEAPPLE"key <-"DOG"zasifrovane <-encrypt_vigenere(text, key)tab <-data.frame( Pozícia =1:nchar(text), Pôvodné =str_split(text, "")[[1]], Zašifrované =str_split(zasifrovane, "")[[1]])kable(tab)
Table 1: Príklad šifrovania textu „PINEAPPLE“ pomocou Vigenèrovej šifry s kľúčom „DOG“
Pozícia
Pôvodné
Zašifrované
1
P
S
2
I
W
3
N
T
4
E
H
5
A
O
6
P
V
7
P
S
8
L
Z
9
E
K
Ako môžeme vidieť na Figure 1, distribúcia frekvencií sa pri rôznych šifrách výrazne líši.
Code
original <-"THIS IS A LONGER EXAMPLE TEXT FOR FREQUENCY ANALYSIS IN CRYPTOGRAPHY USING MODULAR ARITHMETIC IN R LANGUAGE"caesar <-encrypt_caesar(original, 7)vigenere <-encrypt_vigenere(original, "CRYPTO")freq <-function(txt) { letters_only <-unlist(str_extract_all(toupper(txt), "[A-Z]")) df_letters <-data.frame(Pismeno =factor(letters_only, levels = LETTERS)) df_letters %>%group_by(Pismeno) %>%summarise(Pocet =n(), .groups ="drop") %>%complete(Pismeno =factor(LETTERS, levels = LETTERS), fill =list(Pocet =0))}df <-bind_rows(freq(original) %>%mutate(Typ ="Originál"),freq(caesar) %>%mutate(Typ ="Caesar (shift 7)"),freq(vigenere) %>%mutate(Typ ="Vigenère (kľúč CRYPTO)"))ggplot(df, aes(x = Pismeno, y = Pocet, fill = Typ)) +geom_col(position ="dodge") +facet_wrap(~ Typ, ncol =1) +theme_minimal() +labs(y ="Počet výskytov písmen") +theme(legend.position ="none")
Figure 1: Frekvenčná analýza – porovnanie originálneho textu a zašifrovaných verzií
Cyklické správanie operácie modulo 26 je podrobne vizualizované na Figure 2.
Code
df_mod <-data.frame(Index =1:200,Zvysok = (1:200) %%26)p <-ggplot(df_mod, aes(x = Index, y = Zvysok, color = Zvysok,text =paste("Index:", Index, "<br>Zvyšok mod 26:", Zvysok))) +geom_line(alpha =0.7) +geom_point(size =2) +scale_color_gradient(low ="blue", high ="red") +labs(x ="Pozícia", y ="Hodnota modulo 26") +theme_minimal()ggplotly(p, tooltip ="text")
Figure 2: Periodické správanie operácie modulo 26
4 Záver
V tomto projekte som úspešne implementovala Caesarovu a Vigenèrovu šifru pomocou modulárnej aritmetiky v jazyku R. Ukázalo sa, že Caesarova šifra je veľmi náchylná na frekvenčnú analýzu, zatiaľ čo Vigenèrova šifra je vďaka premennému posunu odolnejšia.
Projekt spája teoretickú matematiku s praktickou implementáciou a dátovou vizualizáciou, čo plne spĺňa požiadavky predmetu „Softvér na analýzu dát“.
Možné rozšírenia: automatická dešifrovacia metóda pre Caesarovu šifru, testovanie na reálnych textoch, implementácia moderných algoritmov (napr. RSA).
5 Prehľad použitej literatúry
Bacigál, Tomáš. 2022. Základy Práce so Softvérom Na Analýzu Dát. Slovenská technická univerzita v Bratislave.
Stallings, William. 2020. Cryptography and Network Security: Principles and Practice. 8th ed. Pearson.
Source Code
---title: "Aplikácia modulárnej aritmetiky v kryptografii"subtitle: "Caesarova a Vigenèrova šifra"author: "Kateryna Boiko"date: "2026-06-20"format: html: embed-resources: truetoc: truetoc-depth: 3number-sections: truetheme: cosmocode-fold: truecode-tools: truedf-print: kablebibliography: references.bib---```{r}#| label: setup#| include: false#| warning: false#| message: falselibrary(ggplot2)library(plotly)library(dplyr)library(stringr)library(knitr)library(tidyr)```## ÚvodModulárna aritmetika predstavuje jeden zo základných stavebných kameňov aplikovanej matematiky a je neoceniteľná v oblasti kryptografie. Tento projekt sa zaoberá implementáciou a analýzou dvoch klasických šifrovacích metód — Caesarovej a Vigenèrovej šifry — v programovacom prostredí R. Základy efektívnej manipulácie s dátami v tomto prostredí vychádzajú z metodických postupov, ktoré popisuje @bacigal2022.Cieľom je demonštrovať praktickú aplikáciu teoretických matematických konceptov a ukázať, ako jednoduché operácie modulo vedú k vytvoreniu funkčných šifrovacích systémov.## Teoretické pozadieTeoretické základy klasickej kryptografie, symetrických šifier a ich historický kontext podrobne rozoberá vo svojej práci @stallings2020.### Modulárna aritmetikaDve celé čísla $a$ a $b$ sú kongruentné modulo $n$, ak platí:$$a \equiv b \pmod{n} \quad \Leftrightarrow \quad n \mid (a-b)$$### Caesarova šifraKaždé písmeno abecedy (A–Z) je reprezentované číslom $0$ až $25$. Šifrovanie prebieha podľa vzorca:$$E(x) = (x + k) \mod 26$$### Vigenèrova šifraPoužíva kľúčové slovo, ktoré definuje rôzne posuny pre jednotlivé písmená:$$E(x_i) = (x_i + k_{i \mod m}) \mod 26$$kde $m$ je dĺžka kľúča.```{r}#| label: funkcie#| echo: trueencrypt_caesar <-function(text, shift =3) { codes <-utf8ToInt(toupper(text)) is_letter <- codes >=65& codes <=90 codes[is_letter] <- (codes[is_letter] -65+ shift) %%26+65intToUtf8(codes)}decrypt_caesar <-function(text, shift =3) {encrypt_caesar(text, (26- shift) %%26)}encrypt_vigenere <-function(text, key) {if (nchar(key) ==0) return(text) text_upper <-toupper(text) key_upper <-toupper(str_extract_all(key, "[A-Z]")[[1]]) codes <-utf8ToInt(text_upper) pos <-which(codes >=65& codes <=90)if (length(pos) ==0) return(text) text_nums <- codes[pos] -65 key_nums <-utf8ToInt(paste0(key_upper, collapse ="")) -65 full_key <-rep(key_nums, length.out =length(text_nums)) enc_nums <- (text_nums + full_key) %%26 codes[pos] <- enc_nums +65intToUtf8(codes)}```## Praktická časť a analýza textuV tejto časti demonštrujeme aplikáciu vytvorených funkcií na konkrétnych textových údajoch a analyzujeme vplyv šifrovania na distribúciu znakov. Príklad výpočtu a transformácie je znázornený v @tbl-vigenere.```{r}#| label: tbl-vigenere#| tbl-cap: "Príklad šifrovania textu „PINEAPPLE“ pomocou Vigenèrovej šifry s kľúčom „DOG“"#| warning: false#| message: falsetext <-"PINEAPPLE"key <-"DOG"zasifrovane <-encrypt_vigenere(text, key)tab <-data.frame( Pozícia =1:nchar(text), Pôvodné =str_split(text, "")[[1]], Zašifrované =str_split(zasifrovane, "")[[1]])kable(tab)```Ako môžeme vidieť na @fig-frekvencia, distribúcia frekvencií sa pri rôznych šifrách výrazne líši.```{r}#| label: fig-frekvencia#| fig-cap: "Frekvenčná analýza – porovnanie originálneho textu a zašifrovaných verzií"#| warning: false#| message: falseoriginal <-"THIS IS A LONGER EXAMPLE TEXT FOR FREQUENCY ANALYSIS IN CRYPTOGRAPHY USING MODULAR ARITHMETIC IN R LANGUAGE"caesar <-encrypt_caesar(original, 7)vigenere <-encrypt_vigenere(original, "CRYPTO")freq <-function(txt) { letters_only <-unlist(str_extract_all(toupper(txt), "[A-Z]")) df_letters <-data.frame(Pismeno =factor(letters_only, levels = LETTERS)) df_letters %>%group_by(Pismeno) %>%summarise(Pocet =n(), .groups ="drop") %>%complete(Pismeno =factor(LETTERS, levels = LETTERS), fill =list(Pocet =0))}df <-bind_rows(freq(original) %>%mutate(Typ ="Originál"),freq(caesar) %>%mutate(Typ ="Caesar (shift 7)"),freq(vigenere) %>%mutate(Typ ="Vigenère (kľúč CRYPTO)"))ggplot(df, aes(x = Pismeno, y = Pocet, fill = Typ)) +geom_col(position ="dodge") +facet_wrap(~ Typ, ncol =1) +theme_minimal() +labs(y ="Počet výskytov písmen") +theme(legend.position ="none")```Cyklické správanie operácie modulo 26 je podrobne vizualizované na @fig-modulo.```{r}#| label: fig-modulo#| fig-cap: "Periodické správanie operácie modulo 26"#| warning: false#| message: falsedf_mod <-data.frame(Index =1:200,Zvysok = (1:200) %%26)p <-ggplot(df_mod, aes(x = Index, y = Zvysok, color = Zvysok,text =paste("Index:", Index, "<br>Zvyšok mod 26:", Zvysok))) +geom_line(alpha =0.7) +geom_point(size =2) +scale_color_gradient(low ="blue", high ="red") +labs(x ="Pozícia", y ="Hodnota modulo 26") +theme_minimal()ggplotly(p, tooltip ="text")```## ZáverV tomto projekte som úspešne implementovala Caesarovu a Vigenèrovu šifru pomocou modulárnej aritmetiky v jazyku R. Ukázalo sa, že Caesarova šifra je veľmi náchylná na frekvenčnú analýzu, zatiaľ čo Vigenèrova šifra je vďaka premennému posunu odolnejšia.Projekt spája teoretickú matematiku s praktickou implementáciou a dátovou vizualizáciou, čo plne spĺňa požiadavky predmetu „Softvér na analýzu dát“.Možné rozšírenia: automatická dešifrovacia metóda pre Caesarovu šifru, testovanie na reálnych textoch, implementácia moderných algoritmov (napr. RSA).## Prehľad použitej literatúry::: {#refs}:::