From bec4e0e3ec71cb6a87550e43d01ca27ddc2ef72a Mon Sep 17 00:00:00 2001 From: Daniel Bosk Date: Sat, 27 Apr 2024 22:11:36 +0200 Subject: [PATCH 1/5] Adds scenarios --- project/scenario2024.md | 113 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 project/scenario2024.md diff --git a/project/scenario2024.md b/project/scenario2024.md new file mode 100644 index 0000000..e6e1a45 --- /dev/null +++ b/project/scenario2024.md @@ -0,0 +1,113 @@ +# Last year's scenario/system description + +Due to the recent changes at twitter and Slack, and security problems with +Mastodon (e.g Links to an external site.), KTH decided to commission +a new system for KTH students and staff to communicate in various +constellations: individually, in closed groups according to topics or +roles, KTH wide, and open to the public, with configurable duration +of how long messages are stored. There is a prototype with all the +functionality except security by cryptography, which is your task. For +instance, access rights work correctly but nothing is encrypted or hashed. + +# Scenario/system description 2024, alternative 1 + +KTH wants to improve the security and usability of the access card system. The +cards should be optional, it should be possible to use a smartphone instead +(changes usability, whether the smartphone increases usability is up for +discussion). + +The access system handles both staff and students. Different individuals should +have different access rights. Access rights might be changed at any time +(including expiring at termination of studies or employment). + +Your task is to design the crypto that secures this system. + +# Scenario/system description 2024, alternative 2 + +KTH wants to improve the security and usability of the access card system. The +(passive) cards should be replaced by (active) key fobs that can be kept in the +pocket while opening a door (as is quite popular on modern cars, see [Smart +key][smartkey]). Possibly a smartphone can act as such an active key fob. + +Your task is to design the crypto that secures this system. + +[smartkey]: https://en.wikipedia.org/wiki/Smart_key + +# Scenario/system description 2024, alternative 3 + +People have trouble distinguishing between AI-generated and camera-recorded +photographic images. We want to be able to cryptographically verify the +authenticity of images captured by camera, thus ensuring that the images are +real and not AI-generated. + +Any photographic output from a camera should be signed by the camera. It should +not be possible to get a camera signature on an image or video it didn't +capture, so the image sensor outputs signed data that the camera then writes to +storage. + +Any image viewer/video player (like a web browser) should be able to add a +warning to the user (e.g. a red border) if the signature is missing or invalid +(i.e. it might be AI generated). + +Outline the needed crypto. Discuss the properties needed and any obstacles. +Remember to cover all relevant areas that we've covered in the course. + +## Things to think about + +Key revocation: adversarial environment, must revoke leaked keys. + +What to do with a camera if a key is revoked? Useless camera, recovery? + +Extracting the crypto HW from the camera to use it to sign other things. + +Use sidechannel attacks to extract the key. + +How to generate randomness, what source of entropy? If the HW can be tricked to +reuse the same randomness twice (zero entropy in the pool) for the same +message, we can extract the key. (For some schemes, such as Schnorr.) + +Image editing? Can sign the raw image and change image format to provide raw +(signed) and edits. Same for compression, if the compression runs in a secure +environment, it can sign the compressed image and still be trusted that it +verified the signature and that the results is still "the same". + +Taking a photo of an AI generated image? Can include a depth sensor and sign +that data with the image, to tie them together. + +Strong randomness when keys are generated, "non-overlapping" keys. + +Can track the camera by the signature, privacy concerns. +Can also use the signature to track illegal images (eg +child pornography) back to the camera and its owner. + +If only some cameras have this capability, we'll still get the problem that +people might believe pictures that are taken by "ordinary people" but censored +by the "elite journalists with an agenda" who can afford the expensive cameras +that can sign images. This is a social problem, not a technical one. + +## Alternative solutions + +Using MACs with the camera manufacturer. Manufacturer resigns it. For privacy. + +# Scenario/system description 2024, alternative 4 + +People have trouble distinguishing between bots and humans on platforms such as +Twitter (now that the real service is called X, we can actually use Twitter as +a figurative example service). The problem with bots is that one person may +appear as thousands of persons by having bot accounts act like other humans +liking tweets and posting new tweets propagating similar opinions. Thus someone +might believe that many more people share a certain opinion than is actually +the case. + +To approach this problem, we want to be able to cryptographically detect if two +users on Twitter are the same person or not, thus detecting networks of bots +belonging to the same person. For this reason we will force all users to +digitally sign all their tweets. A person making a bot network will have to +sign all tweets (or likes) with the same key. + +Someone reading a twitter feed can then detect if two tweets are signed by the +same key, and thus the same person. This can be used to detect bot networks. + +Outline the needed crypto. Discuss the properties needed and any obstacles. +Remember to cover all relevant areas that we've covered in the course. + From 0f32e29d3672c02fb9d9aaefc41cd3aef277ba33 Mon Sep 17 00:00:00 2001 From: Daniel Bosk Date: Mon, 17 Jun 2024 15:29:12 +0200 Subject: [PATCH 2/5] Updates makefiles --- makefiles | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makefiles b/makefiles index 01ac17e..45bd277 160000 --- a/makefiles +++ b/makefiles @@ -1 +1 @@ -Subproject commit 01ac17e46017837aad4ebfd4f6a31c76c99c57eb +Subproject commit 45bd27794ae5507cc16bbccab5a84a2920135adb From f4ea0c8e184292e4e0f0fd32ade4afeae578df7c Mon Sep 17 00:00:00 2001 From: Daniel Bosk Date: Mon, 17 Jun 2024 15:32:24 +0200 Subject: [PATCH 3/5] Adds first version of results evaluation script --- evaluation/.gitignore | 9 ++ evaluation/Makefile | 9 ++ evaluation/preamble.tex | 49 ++++++ evaluation/results.nw | 346 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 413 insertions(+) create mode 100644 evaluation/.gitignore create mode 100644 evaluation/Makefile create mode 100644 evaluation/preamble.tex create mode 100644 evaluation/results.nw diff --git a/evaluation/.gitignore b/evaluation/.gitignore new file mode 100644 index 0000000..5b214dd --- /dev/null +++ b/evaluation/.gitignore @@ -0,0 +1,9 @@ +ltxobj/ +results-INL1.csv +results-LAB1.csv +results.csv +results.pdf +results.sh +results.tex +submissions-INL1.csv +submissions-LAB1.csv diff --git a/evaluation/Makefile b/evaluation/Makefile new file mode 100644 index 0000000..6d19167 --- /dev/null +++ b/evaluation/Makefile @@ -0,0 +1,9 @@ +LATEXFLAGS+= -shell-escape + +.PHONY: all +all: results.pdf results.sh +Makefile: results.nw + ${NOTANGLE.mk} +INCLUDE_MAKEFILES=../makefiles +include ${INCLUDE_MAKEFILES}/tex.mk +include ${INCLUDE_MAKEFILES}/noweb.mk diff --git a/evaluation/preamble.tex b/evaluation/preamble.tex new file mode 100644 index 0000000..768337c --- /dev/null +++ b/evaluation/preamble.tex @@ -0,0 +1,49 @@ +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[swedish,british]{babel} + +\usepackage{noweb} +\noweboptions{longchunks,longxref} +\usepackage{booktabs} + +\usepackage[natbib,style=alphabetic,maxbibnames=99]{biblatex} +\addbibresource{bibliography.bib} + +\usepackage[all]{foreign} +\renewcommand{\foreignfullfont}{} +\renewcommand{\foreignabbrfont}{} + +%\usepackage{newclude} +\usepackage{import} + +\usepackage[strict]{csquotes} +\usepackage[single]{acro} + +\usepackage{subcaption} + +\usepackage[noend]{algpseudocode} +\usepackage{xparse} + +\let\email\texttt + +\usepackage[outputdir=ltxobj]{minted} +\setminted{autogobble,linenos} + +\usepackage{pythontex} +\setpythontexoutputdir{.} +\setpythontexworkingdir{..} + +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{mathtools} +\usepackage{amsthm} +\usepackage{thmtools} +\usepackage[unq]{unique} +\DeclareMathOperator{\powerset}{\mathcal{P}} + +\usepackage[binary-units]{siunitx} + +\usepackage{didactic} + +\usepackage{hyperref} +\usepackage{cleveref} diff --git a/evaluation/results.nw b/evaluation/results.nw new file mode 100644 index 0000000..0dadb3c --- /dev/null +++ b/evaluation/results.nw @@ -0,0 +1,346 @@ +\documentclass[a4paper]{article} +\input{preamble.tex} + +% https://tex.stackexchange.com/a/205183/17418 +\def\shortyear#1{\expandafter\shortyearhelper#1} +\def\shortyearhelper#1#2#3#4{#3#4} + +\title{Results summary: tilkry\shortyear{\the\year}} +\author{Daniel Bosk} + +\begin{document} +\maketitle +\tableofcontents +@ + +\begin{pycode} +import subprocess + +def minted_output(command): + output = subprocess.run(command, capture_output=True) + print(r'\begin{minted}{text}') + print(output.stdout.decode('utf-8').strip()) + print(r'\end{minted}') +\end{pycode} + +\section{The stats} + +We'll give an overview of the stats here. +In the following section we see how they are computed. +In this section we'll just run the script and show the output here. + +\subsection{Results on INL1} + +The INL1 module has only mandatory assignments. +Let's start with the overall grades: +\begin{pycode} +minted_output(['bash', 'results.sh', 'grades', 'INL1']) +\end{pycode} + +We can see that there are some Fs. +Let's see which assignments generated Fs: +\begin{pycode} +minted_output(['bash', 'results.sh', 'fails', 'INL1']) +\end{pycode} +Most are due to the quiz. + +\subsection{Results on LAB1} + +Let's move on to LAB1. +This is the more complex part where there are optional assignments, and +depending on how the student does they'll get a grade in the scale between A +and F. +\begin{pycode} +minted_output(['bash', 'results.sh', 'grades', 'LAB1']) +\end{pycode} +Most students did well. +Particularly many got an A or B. + +Let's see which assignments generated Fs: +\begin{pycode} +minted_output(['bash', 'results.sh', 'fails', 'LAB1']) +\end{pycode} +Only one. +This is probably due to the students not having submitted some of the mandatory +assignments. +Therefore, let's have a look at which assignments missed the most submissions: +\begin{pycode} +minted_output(['bash', 'results.sh', 'missing', 'LAB1']) +\end{pycode} +We see that rather many of the mandatory assignments are missing submissions. + + +\section{The script, or, how the results are made} + +We'll write a short shell script that fetches the results from Canvas and +summarizes them in statistics. +This will be done in the same way as they are reported to LADOK, so they'll be +representative. +<>= +#!/bin/bash + +<> +<> + +main() { + <> +} + +# call main if not sourced +# https://stackoverflow.com/a/28776166/1305099 +(return 0 2>/dev/null) || main "$@" +@ + +We'll also make calls to that code in this documentation, to get the results +and how they were generated. +<>= +<> + +.PHONY: all +all: results.pdf results.sh + +results.pdf: results.tex results.sh +@ + +We'll also build this Makefile. +We're fortunately enough that [[make]] tries to remake any Makefile that it +loads. +<>= +Makefile: results.nw + ${NOTANGLE.mk} +@ + +We'll execute the script in the documentation using PythonTeX, so we need the +[[-shell-escape]] flag. +<>= +LATEXFLAGS+= -shell-escape +@ + +Finally, we'll use some automation to build. +<>= +INCLUDE_MAKEFILES=../makefiles +include ${INCLUDE_MAKEFILES}/tex.mk +include ${INCLUDE_MAKEFILES}/noweb.mk +@ + + +\subsection{Calling the functions} + +We'll take the function name as the first argument and simply call it. +If we don't have any arguments, we'll call the [[all]] function. +<>= +[[ "$1" = "" ]] && all || "$@" +<>= +all() { + <> +} +@ + + + +\subsection{Fetching the results} + +Let's start by defining the course and modules that we're interested in. +<>= +YEAR=$(date +%y) +COURSE=tilkry${YEAR} +@ + +We'll now defined two functions that can be used to fetch the desired results. +These will also act as a cache, so that we don't fetch results more than once. + +We have two modules: LAB1 and INL1. +LAB1 needs a particular module to compute the final grade ([[-S]] option). +So we need to treat that with a special case. +But INL1 can use the default. + +We'll use a function to fetch the results for each module. +It takes the module as an argument. +If the module is LAB1, we'll use the special case. + +We'll compute the grades using [[canvaslms results]], which is the same way as +the results are reported to LADOK. +However, this takes time, so we'll only do it if the file doesn't already +exist. +This way each function can call the same function to fetch the results, but it +will slow down only if they don't already exist. +<>= +fetch_results() { + local module=$1 + local file=results-${module}.csv + + echo "$file" + + [[ -f $file ]] && return + + case $module in + LAB1) + canvaslms results -c ${COURSE} -F '' \ + -A "^${module}" -S canvaslms.grades.tilkry${module} \ + > ${file} + ;; + *) + canvaslms results -c ${COURSE} -F '' \ + -A "^${module}" \ + > ${file} + ;; + esac +} +@ + +We'll do the same for fetching submission results for the individual +assignments (not the module as a whole). +There is no special case for this one. +<>= +fetch_submissions() { + local module=$1 + local file=submissions-${module}.csv + + echo "$file" + + [[ -f $file ]] && return + + canvaslms submissions -c ${COURSE} \ + -A "^${module}" \ + > ${file} +} +@ + + +\subsection{The stats} + +Let's look at the stats. +We'll add one function per stat we want. + +\subsection{Grades of modules} + +We'll start by looking at the grades of the modules. +We'll create a function that generates stats for a module, where the module is +passed as an argument. +<>= +grades() { + local modules="$@" + + for module in $modules; do + local results=`fetch_results $module` + echo + echo "${module}:" + cat $results | cut -f 4 | sort | uniq -c + done +} +@ + +If we consider running [[grades LAB1 INL1]], the result looks like this: +\begin{pycode} +minted_output(['bash', 'results.sh', 'grades', 'LAB1', 'INL1']) +\end{pycode} + + +\subsection{Which assignments generated Fs?}\label{GeneratedFs} + +We want to know this for each of the modules (LAB1, INL1). +We want a function that takes the module as an argument and then outputs the +distribution of Fs for the assignments. +We'll do this by filtering out the Fs and then count the occurrences of each +assignment. +<>= +fails() { + local modules="$@" + + for module in $modules; do + local submissions=`fetch_submissions $module` + echo + echo "${module} Fs:" + grep -E '\sFx?\s' $submissions | cut -f 2 | sort | uniq -c \ + | sort -n + done +} +@ + +If we consider running [[fails INL1]], the result looks like this: +\begin{pycode} +minted_output(['bash', 'results.sh', 'fails', 'INL1']) +\end{pycode} + +\subsection{Stats of LAB1 and INL1} + +We'll start by looking at the grades of LAB1, which is also the final grade. +<>= +echo +grades LAB1 +fails LAB1 +echo +grades INL1 +fails INL1 +@ + +\subsection{Which assignments were the least popular?} + +We now want to see which assignments the students did and which they did not. +In \cref{GeneratedFs} we saw which assignments generated Fs. +But that will only catch the assignments that students did and failed, not +assignments where students made no attempt. + +We'll create a function that takes the module as an argument and then outputs +the distribution of submissions for each assignment. +A submission is counted as a submission if it has a date. +<>= +submissions() { + local modules="$@" + + for module in $modules; do + <> + <> + echo + echo "${module} submissions:" + grep <> \ + | <> + <> + done +} +<>= +local submissions=`fetch_submissions $module` +<>= +local num_users=`cat $submissions | cut -f 3 | sort -u | wc -l` +<>= +-P '\d{4}-\d{2}-\d{2}' $submissions +<>= +cut -f 2 | sort | uniq -c | sort -rn +<>= +echo "Out of maximum ${num_users}." +@ + +If we consider running [[submissions INL1]], the result looks like this: +\begin{pycode} +minted_output(['bash', 'results.sh', 'submissions', 'INL1']) +\end{pycode} +But if we look at LAB1, which has optional assignments, we get this: +\begin{pycode} +minted_output(['bash', 'results.sh', 'submissions', 'LAB1']) +\end{pycode} + +We also add a function for the opposite, to count how many submissions an +assignment is missing. +<>= +missing() { + local modules="$@" + for module in $modules; do + <> + <> + echo + echo "${module} missing submissions:" + grep -v -P <> \ + | <> + <> + done +} +@ + +If we consider running [[missing LAB1]], the result looks like this: +\begin{pycode} +minted_output(['bash', 'results.sh', 'missing', 'LAB1']) +\end{pycode} +We can see that the assignment \enquote{Secure multi-party computation} is the +only (optional) assignment that no student did. + +\end{document} From 7d06988a71e686600366f1a6976b5c7a997b092a Mon Sep 17 00:00:00 2001 From: Daniel Bosk Date: Wed, 15 Jan 2025 10:45:34 +0100 Subject: [PATCH 4/5] Adds course-overview slides --- course-overview/.gitignore | 3 + course-overview/Makefile | 22 ++ course-overview/abstract.tex | 22 ++ course-overview/contents.tex | 306 ++++++++++++++++++++++++++ course-overview/figs/HAC-TOC.png | Bin 0 -> 51157 bytes course-overview/figs/lecture-mode.png | Bin 0 -> 28204 bytes course-overview/notes.tex | 45 ++++ course-overview/preamble.tex | 43 ++++ course-overview/slides.tex | 118 ++++++++++ 9 files changed, 559 insertions(+) create mode 100644 course-overview/.gitignore create mode 100644 course-overview/Makefile create mode 100644 course-overview/abstract.tex create mode 100644 course-overview/contents.tex create mode 100644 course-overview/figs/HAC-TOC.png create mode 100644 course-overview/figs/lecture-mode.png create mode 100644 course-overview/notes.tex create mode 100644 course-overview/preamble.tex create mode 100644 course-overview/slides.tex diff --git a/course-overview/.gitignore b/course-overview/.gitignore new file mode 100644 index 0000000..67cb3d2 --- /dev/null +++ b/course-overview/.gitignore @@ -0,0 +1,3 @@ +ltxobj/ +notes.pdf +slides.pdf diff --git a/course-overview/Makefile b/course-overview/Makefile new file mode 100644 index 0000000..d474041 --- /dev/null +++ b/course-overview/Makefile @@ -0,0 +1,22 @@ +.PHONY: all +all: notes.pdf slides.pdf + +LATEXFLAGS+= -shell-escape + +SRC+= preamble.tex +SRC+= abstract.tex contents.tex + +notes.pdf: notes.tex +notes.pdf: ${SRC} + +slides.pdf: slides.tex +slides.pdf: ${SRC} + + +.PHONY: clean +clean: + ${RM} notes.pdf slides.pdf + + +INCLUDE_MAKEFILES=../makefiles +include ${INCLUDE_MAKEFILES}/tex.mk diff --git a/course-overview/abstract.tex b/course-overview/abstract.tex new file mode 100644 index 0000000..4012d9d --- /dev/null +++ b/course-overview/abstract.tex @@ -0,0 +1,22 @@ +% What's the problem? +% Why is it a problem? Research gap left by other approaches? +% Why is it important? Why care? +% What's the approach? How to solve the problem? +% What's the findings? How was it evaluated, what are the results, limitations, +% what remains to be done? + +% XXX Summary +\emph{Summary:} +\dots + +% XXX Motivation and intended learning outcomes +\emph{Intended learning outcomes:} +\dots + +% XXX Prerequisites +\emph{Prerequisites:} +\dots + +% XXX Reading material +\emph{Reading:} +\dots diff --git a/course-overview/contents.tex b/course-overview/contents.tex new file mode 100644 index 0000000..7e82160 --- /dev/null +++ b/course-overview/contents.tex @@ -0,0 +1,306 @@ +\mode* + +\section{The goal} + +\begin{frame}[fragile] + \begin{center} + \Large + Primitives + \qquad + \qquad + Constructions + \end{center} +\end{frame} + +\begin{frame}[fragile] + \begin{columns} + \begin{column}{0.5\textwidth} + \begin{block}{Primitives} + \begin{itemize} + \item Block ciphers + \item Stream ciphers + \item Hash functions + \item Message authentication codes + \item Digital signatures + \item Public key encryption + \item Zero-knowledge proofs + \item Secure multi-party computation + \end{itemize} + \end{block} + \end{column} + \begin{column}{0.5\textwidth} + \begin{block}{Constructions} + \begin{itemize} + \item Key exchange protocols + \item Identification and authentication protocols + \item Complex constructions from primitives + \end{itemize} + \end{block} + \end{column} + \end{columns} +\end{frame} + +\subsection{Primitives} + +\begin{frame}[fragile] + \begin{example}[Primitives: OTP] + \begin{itemize} + \item The One-Time Pad is perfectly secure. + \item It is a stream cipher. + \item It's also malleable---predictable bit flips! + \end{itemize} + \end{example} +\end{frame} + +\begin{frame}[fragile] + \begin{example}[Primitives: RSA and ElGamal] + \begin{itemize} + \item RSA and ElGamal are public key encryption schemes. + \item They secure the connection to our internet bank. + \item Is it a good idea to send + \begin{center} + Enc(\texttt{``Transfer 1000 SEK to account 1234''}, k) + \end{center} + to the bank? + \end{itemize} + \end{example} +\end{frame} + +\subsection{Constructions} + +\begin{frame}[fragile] + \begin{example}[Construction: BankID] + \begin{itemize} + \item BankID is a construction based on public key encryption. + \item It is used to authenticate users. + \item It is also used to sign transactions. + \item How should this be constructed to minimize attacks? + \end{itemize} + \end{example} +\end{frame} + +\begin{frame}[fragile] + \begin{example}[Construction: Tor] + \begin{itemize} + \item Tor is a construction based on onion routing. + \item It is used to anonymize internet traffic. + \item It uses crypto a lot. + \item How should this be constructed to minimize attacks? + \end{itemize} + \end{example} +\end{frame} + +\begin{frame}[fragile] + \begin{example}[Example: The Signal Protocol] + \begin{itemize} + \item The Signal Protocol is used for secure messaging. + \item It provides end-to-end encryption for messages. + \item Key features include perfect forward secrecy and deniability. + \item Widely used in applications like WhatsApp and Facebook Messenger. + \item How to do group messaging securely? + \end{itemize} + \end{example} +\end{frame} + +\begin{frame}[fragile] + \begin{example}[Example: Remote Attestation Protocols] + \begin{itemize} + \item Remote Attestation validates the integrity of a device. + \item It leverages cryptographic proofs to verify software states. + \item Commonly used in trusted computing environments. + \item Helps in ensuring the device has not been tampered with. + \item How can we use this and how can we do it correctly? + \end{itemize} + \end{example} +\end{frame} + +\begin{frame}[fragile] + \begin{example}[Example: Keyless Entry to Cars] + \begin{itemize} + \item Keyless entry systems use wireless communication. + \item Protocols allow unlocking and starting the vehicle without a + physical key. + \item Vulnerable to relay attacks if not properly secured. + \end{itemize} + \end{example} +\end{frame} + +\subsection{Intended learning outcomes} + +\begin{frame}[fragile] + \begin{block}{Intended learning outcomes} + After passing the course, the student should be able to: + \begin{itemize} + \item use basic terminology in + computer security and cryptography correctly + \item describe cryptographic concepts and explain their security + properties + \item find and use documentation of cryptographic libraries and standards + \item identify and categorise threats against a cryptographic IT-system + at a conceptual level, suggest appropriate countermeasures and present + the reasoning to others + \end{itemize} + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{Purpose} + \dots in order to + \begin{itemize} + \item as citizen and engineer be able to discuss applied cryptography in + general, and risks of using/developing cryptography in particular + \item in professional life and/or research and development project be + able to evaluate challenges in software development related to + cryptography. + \end{itemize} + \end{block} +\end{frame} + +\begin{frame} + \begin{block}{In other words ...} + \begin{itemize} + \item<+> You should be able to write your own version of BankID. + \item<+> You should be able to make well-founded contributions to + discussions about things like ChatControl. + \end{itemize} + \end{block} +\end{frame} + + +\section{The content} + +\subsection{Lectures} + +\begin{frame}[fragile] + \begin{block}{Lecture format} + \begin{itemize} + \item Most on campus + \item Some flipped (watch videos before class) + \item Some online (participate through Zoom) + \end{itemize} + \end{block} + + \begin{figure} + \includegraphics[width=0.8\textwidth]{figs/lecture-mode.png} + \caption{Screenshot from Canvas showing the lecture mode.} + \end{figure} +\end{frame} + +\begin{frame}[fragile] + \begin{block}{Lecture content} + \begin{itemize} + \item Crypto primitives + \item Practical applications + \item Issues and higher level problems + \end{itemize} + \end{block} +\end{frame} + +\begin{frame}[fragile] + \begin{block}{Lecture content (cont.)} + \begin{itemize} + \item The lectures are complemented by reading material. + \item \alert<2>{However, not all of them are published yet.} + \end{itemize} + \end{block} + + \begin{figure} + \includegraphics[width=0.8\textwidth]{figs/lecture-mode.png} + \caption{Screenshot from Canvas showing the lecture mode.} + \end{figure} +\end{frame} + +\subsection{Assignments} + +\begin{frame}[fragile] + \begin{block}{LADOK modules} + \begin{itemize} + \item LAB1 + \item INL1 + \end{itemize} + \end{block} +\end{frame} + +\begin{frame}[fragile] + \begin{block}{LAB1, mandatory} + \begin{itemize} + \item Cryptanalysis of Ciphertexts + \item Implement AES (Kattis Problem) + \item AES presentation + \item MANDATORY Seminar (31/1): usability (Sonja) ON CAMPUS + \item MANDATORY Seminar (pick 6/2): Impact considerations around crypto systems (Sonja) ON CAMPUS + \item MANDATORY Design Considerations (after the impact considerations seminar) + \item MANDATORY Lab (20-21/2): Introduction to ProVerif (Karl and Jesper) ON CAMPUS + \end{itemize} + \end{block} +\end{frame} + +\begin{frame}[fragile] + \begin{block}{LAB1, optional} + \begin{itemize} + \item Optional: Cryptopals (C, B, A) + \item Optional: Side channels (C, B, A) + \item Optional: Secure multi-party computation (C, B, A) + \end{itemize} + \end{block} + + \begin{remark}[Higher grades] + \begin{itemize} + \item To get a higher grade, you need to do some of the optional + assignments. + \end{itemize} + \end{remark} +\end{frame} + +\begin{frame}[fragile] + \begin{block}{INL1} + \begin{itemize} + \item INL1Quiz Cryptographic Concepts 2024 + \item INL1Written + \item INL1Oral + \end{itemize} + \end{block} +\end{frame} + +\begin{frame}[fragile] + \begin{block}{Assignment format} + \begin{itemize} + \item Most can be done at any time. + \item Some have a specified lab session. + \begin{itemize} + \item MANDATORY Seminar (31/1): usability (Sonja) ON CAMPUS + \item MANDATORY Seminar (pick 6/2): Impact considerations around + crypto systems (Sonja) ON CAMPUS + \item MANDATORY Lab (20-21/2): Introduction to ProVerif (Karl and + Jesper) ON CAMPUS + \end{itemize} + \item All assignments are individual. + \end{itemize} + \end{block} + + \begin{remark}[LabWeek] + \begin{itemize} + \item If you miss, you can catch up in LabWeek in June. + \end{itemize} + \end{remark} +\end{frame} + +\subsection{Structure} + +\begin{frame}[fragile] + \begin{center} + \huge + Canvas + \end{center} +\end{frame} + + +\section{What you should be able to do in the end} + +\begin{frame}[fragile] + \begin{block}{What you should be able to to do} + \begin{itemize} + \item Let's look at INL1Written + \end{itemize} + \end{block} +\end{frame} diff --git a/course-overview/figs/HAC-TOC.png b/course-overview/figs/HAC-TOC.png new file mode 100644 index 0000000000000000000000000000000000000000..7d5fce98a22d52a5922c6bc9741cdf14a29eb726 GIT binary patch literal 51157 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 + \tableofcontents[currentsection] + \end{frame} +} + +\ProvideDocumentEnvironment{assumption}{o}{% + \IfValueTF{#1}{% + \begin{block}{Assumption: #1} + }{% + \begin{block}{Assumption} + } +}{% + \end{block} +} + +\ProvideDocumentEnvironment{protocol}{o}{% + \IfValueTF{#1}{% + \begin{block}{Protocol: #1} + }{% + \begin{block}{Protocol} + } +}{% + \end{block} +} + +\ProvideDocumentEnvironment{remark}{o}{% + \IfValueTF{#1}{% + \begin{alertblock}{Note: #1} + }{% + \begin{alertblock}{Note} + } +}{% + \end{alertblock} +} + +\ProvideDocumentEnvironment{idea}{o}{% + \IfValueTF{#1}{% + \begin{block}{Idea: #1} + }{% + \begin{block}{Idea} + } +}{% + \end{block} +} + +\ProvideDocumentEnvironment{question}{o}{% + \setbeamercolor{block body}{bg=orange!15,fg=black} + \setbeamercolor{block title}{bg=orange,fg=white} + \setbeamercolor{local structure}{fg=orange} + \IfValueTF{#1}{% + \begin{block}{Question: #1} + }{% + \begin{block}{Question} + } +}{% + \end{block} +} + +\ProvideDocumentEnvironment{exercise}{o}{% + \setbeamercolor{block body}{bg=yellow!10,fg=black} + \setbeamercolor{block title}{bg=yellow,fg=black} + \setbeamercolor{local structure}{fg=yellow} + \IfValueTF{#1}{% + \begin{block}{Exercise: #1} + }{% + \begin{block}{Exercise} + } +}{% + \end{block} +} + + +\begin{document} +\title{% + Overview of the Applied Crypto course +} +\author{Daniel Bosk} +\institute{% + KTH EECS +} + +\begin{frame} + \maketitle +\end{frame} + +\mode +\input{contents.tex} +\mode* + +\begin{frame}[allowframebreaks] + \printbibliography +\end{frame} +\end{document} From 7ac01e9368f8c4d713b177b2ac5757118586da31 Mon Sep 17 00:00:00 2001 From: Daniel Bosk Date: Wed, 15 Jan 2025 16:24:26 +0100 Subject: [PATCH 5/5] Updates makefiles module --- makefiles | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makefiles b/makefiles index 45bd277..f8aa545 160000 --- a/makefiles +++ b/makefiles @@ -1 +1 @@ -Subproject commit 45bd27794ae5507cc16bbccab5a84a2920135adb +Subproject commit f8aa5459d4fd486c3094804131448100da4568b8