From 9d0d27d515f8ea73c18928f48a1f11878beed33e Mon Sep 17 00:00:00 2001 From: Heiko Schaefer Date: Fri, 29 Sep 2023 19:01:22 +0200 Subject: [PATCH] ch3: minor cleanup --- book/source/03-cryptography.md | 31 ++++----- book/source/diag/cryptographic_keys.png | Bin 12722 -> 18377 bytes book/source/diag/cryptographic_keys.svg | 83 ++++++++++++++++-------- 3 files changed, 70 insertions(+), 44 deletions(-) diff --git a/book/source/03-cryptography.md b/book/source/03-cryptography.md index 1130c53..58ab78e 100644 --- a/book/source/03-cryptography.md +++ b/book/source/03-cryptography.md @@ -1,5 +1,5 @@ (cyrptography_chapter)= -# Cryptographic concepts/terms +# Cryptographic concepts and terms ```{admonition} VISUAL :class: warning @@ -24,15 +24,17 @@ Participants in symmetric-key operations need to exchange the shared secret over - visualization? (maybe a black key icon, following wikipedia's example?) ``` -Symmetric-key cryptography is much faster than public-key cryptography. Also, most current symmetric cryptographic algorithms are considered quantum-resistant. +### Benefits and downsides -So symmetric-key cryptography has major benefits, but exchanging the shared secret is a problem that needs to be solved separately. +Symmetric-key cryptography has major benefits: it is much faster than public-key cryptography (see below). Also, most current symmetric cryptographic algorithms are considered quantum-resistant. -[Hybrid cryptosystems](hybrid_cryptosystems) are one common approach to leverage the benefits of symmetric-key cryptography, while handling the shared secret with a separate mechanism (using public-key cryptography). +However, exchanging the required shared secret is a problem that needs to be solved separately. + +[Hybrid cryptosystems](hybrid_cryptosystems) (see below) are one common approach to leverage the benefits of symmetric-key cryptography, while handling the shared secret with a separate mechanism (using public-key cryptography). ### Symmetric-key cryptography in OpenPGP -Symmetric cryptography is used in OpenPGP (as part of a hybrid cryptosystem). +Symmetric cryptography is used in OpenPGP as part of a hybrid cryptosystem. Where symmetric keys are used in OpenPGP, they are referred to as "session keys." @@ -40,13 +42,13 @@ Where symmetric keys are used in OpenPGP, they are referred to as "session keys. [Authenticated encryption](https://en.wikipedia.org/wiki/Authenticated_encryption) is a class of cryptographic schemes that gives additional guarantees besides confidentiality. -In OpenPGP version 6, AEAD is used to solve the problem of "malleability": In past versions of the OpenPGP protocol, some malicious changes to ciphertext were undetectable. With AEAD undetected changes of ciphertext are not possible. +In OpenPGP version 6, AEAD is used to solve the problem of "malleability": In past versions of the OpenPGP protocol, some malicious changes to ciphertext were undetectable. With AEAD, undetected changes of ciphertext are not possible. ## Public-key, or asymmetric cryptography [Public-key cryptography](https://en.wikipedia.org/wiki/Public-key_cryptography) systems use asymmetric pairs of related keys. Public-key cryptographic systems support *encryption/decryption* and *digital signature* operations. -Public-key cryptography doesn't require participants to have pre-arranged a shared secret. +Public-key cryptography doesn't require participants to pre-arrange a shared secret. ### Asymmetric cryptographic key pairs @@ -65,19 +67,10 @@ An asymmetric cryptographic key pair - Heiko: maybe use colors + distinct shapes for the two key halves? ``` -An asymmetric cryptographic key pair consists of a public and a private part. In this document, we'll show the public part of key pair in green, and the private part in red. - -We'll usually visualize cryptographic key pairs in this more compact form: - -```{figure} diag/keypair.png ---- ---- -Asymmetric key pair, more compact representation -``` +An asymmetric cryptographic key pair consists of a public and a private part. In this document, we'll show the public part of a key pair in green, and the private part in red. Note that in many contexts, only the public part is present (more on that later): - ```{figure} diag/keypair_pub.png --- --- @@ -88,7 +81,9 @@ Only the public part of an asymmetric key pair OpenPGP makes heavy use of public-key cryptography, both for encryption and signing operations. -Note that, for historical reasons, OpenPGP often uses the terms "public/secret key" instead of "public/private key." The OpenPGP RFC and other documentation often use the non-standard term "secret key" instead of the more common "private key." +Note that, for historical reasons, the OpenPGP RFC and other documentation often use the non-standard term "secret key" instead of the more common "private key." + +So in OpenPGP, the pair of terms "public/secret key" is sometimes used instead of the more common "public/private key." ### Cryptographic digital signatures diff --git a/book/source/diag/cryptographic_keys.png b/book/source/diag/cryptographic_keys.png index 7e6b057975446acd270aa26df3544f07c75f2bf4..c8883cf6c071db3d2646826c5c09ac929fc44295 100644 GIT binary patch literal 18377 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%0AbhF$t^hUZ73Ro2;r z4v>=JKu55JAa;_Q;60)<4i&Pf46P?}M5RWJfG6aIF4wM~qs7U$uE8b2> z7hk|6UC$Gz^+D>nS_iy?g9G63B;4KW`_Bs0g;0pm6skt>)Ra2#P9FBjW0cp>p zxWIh~oHqruX&_3YP(YPqfbkWAC4PAG$B%nP65v)v1))EO=o`p}0iGL(BU@5ZL{5$X zY_#veUL4S?I{jZVmWibs1JH|WarHAevLAQ=2gk(1A_`l9qJ8*~3To)yc$bERks z9SCT;h4(Mv0^o}5rlP%$8vyOoQ@AdQmWM~>%_mTc*0vslY#=QoEiH=7F)S?spe2HK zO7*P)&%YeA?LC6mQPDd=Q zO7kd}z4?1gOgM14PSBvh(ixeO5)OuA=9=EEXWDUqrjQ~FrNIZ10psy<2Oa|hgK}LG z;OrXZ>CuBSH|ccNpKe(?fdv(lV- z$r|{gHAn0e0Vg?@pC<<^T=(z$78O}k{E7?k^TUAUwuaDrt5=wl19CM#Vxh&s!D$A( zX>)PzvRhx>w+jGBWeakpFF-3~N5QR23Y6Q%OhsYL9B3Evs;c**9AUT*wOIQNh)--F zSgr;_vb`8Al9C7{ zUV4B(hN?jZHB}tK2-;aWCmjo0?1^7=JAYr`*g&a5jDpAAg9>6QGw4f6WB;FKo zWV5xiGwKByg=)6a0!X^+AhMJKm7opd8cI1YmZ+BN(qPI2P$v|3ypIA-90&@8Aq3c5(q*B<-SaP4x$QZ zu7+`(e0(gXgxD}zQ0Kx3xXq0rwP zDu0E=Y@C1aX45#u%OV+=0zKF0aSIq1Q1Mn(pA$hV zK;7Qa@l;Qb2EC@Wa9XN&rql~u0@xN%^7Pd?7%j( zr$ow=C6lc9SQxf7R3RPot_`=v6#U0F#kg*aGx#M98JEvmm{)0)vf-r;1&(d{_Za$$ z(4tV0MmPOhQ21?g0-Wbt--$(qL`pWU69kf{tf$V`{q!}|_-4lc^1CB}@b#}3MYD42 zUqp@yNimZimF(wXp>c8=i1XBL6M42Uh_GiJMije7}#B|ld{6V_snZ&{;!T?tBGzoLN_~iw%Z-v`nCF}8bF8EO z(8ItHkH>Z$FZB5x)k5+eM}e)Q+ME>s`W(%o40$H~FY3+ak20st=f7UNN{5Nk6&gDw z4SSB!wL%QM?-=u*wLR0e?6Nd>b}2YkgC=#vF1;Pv3;&jFD~6bYZ-5< zvpEhm{tXdR5G$PU9eDHXA>}{QsDcb8rue=^m)lX2V(S_tqC%TRPXmcWaa_chpZF7r l+CM|S3bJI{fbWeAJl?M)pAGw2ej5e9q{QXKibeH({})QaI$Qt% literal 12722 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 Zc>;@cnJH)s{=Wr6T}4~DOwr=S{{t+JgsuPp diff --git a/book/source/diag/cryptographic_keys.svg b/book/source/diag/cryptographic_keys.svg index df4bc1b..2d5d57d 100644 --- a/book/source/diag/cryptographic_keys.svg +++ b/book/source/diag/cryptographic_keys.svg @@ -2,12 +2,12 @@ + inkscape:current-layer="layer1" + inkscape:export-bgcolor="#ffffffff" /> - - public cryptographic key + x="107.71756" + y="77.314079">public cryptographic key private cryptographic key + x="106.57175" + y="84.962532">private cryptographic key + + + + + cryptographic keypair + + +