From a29bb0e3448b15b7b0d4a8739359fa932fd3c69e Mon Sep 17 00:00:00 2001 From: drskalman <35698397+drskalman@users.noreply.github.com> Date: Tue, 2 Jan 2024 10:36:07 +0800 Subject: [PATCH] Add image to authenticated encryption silde for encryption module (#884) * Add image to authenticated encryption silde for encryption module * Add notes to the AE slide to clarifys the AE EtM image --- syllabus/1-Cryptography/4-Encryption-slides.md | 6 ++++++ .../img/Authenticated_Encryption_EtM.png | Bin 0 -> 14086 bytes 2 files changed, 6 insertions(+) create mode 100644 syllabus/1-Cryptography/img/Authenticated_Encryption_EtM.png diff --git a/syllabus/1-Cryptography/4-Encryption-slides.md b/syllabus/1-Cryptography/4-Encryption-slides.md index 63d4c18df..982af036c 100644 --- a/syllabus/1-Cryptography/4-Encryption-slides.md +++ b/syllabus/1-Cryptography/4-Encryption-slides.md @@ -237,12 +237,18 @@ Authenticated encryption adds a **M**essage **A**uthentication **C**ode to addit A reader can check the MAC to ensure the message was constructed by someone knowing the secret. + + Notes: Specifically, this authenticity says that _anyone who does not know the sender's secret_ could not construct the message. Generally, this adds ~16-32 bytes of overhead per encrypted message. +The image only shows only of of many possible constructions of authenticated encryption. + +Explain that the Key2 in the image, could be derived from Key1. + --- ## AEAD (**A**uthenticated **E**ncryption **A**dditional **D**ata) diff --git a/syllabus/1-Cryptography/img/Authenticated_Encryption_EtM.png b/syllabus/1-Cryptography/img/Authenticated_Encryption_EtM.png new file mode 100644 index 0000000000000000000000000000000000000000..b63cbd71888643e733cb60ff38b0741e958b5a62 GIT binary patch literal 14086 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