<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Cryptography on IT Comparison</title><link>https://comparison.metacog.co.kr/tags/cryptography/</link><description>Recent content in Cryptography on IT Comparison</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 03 Aug 2026 04:32:15 +0900</lastBuildDate><atom:link href="https://comparison.metacog.co.kr/tags/cryptography/index.xml" rel="self" type="application/rss+xml"/><item><title>Digital Signature vs Digital Certificate: Proving Data vs Proving Identity</title><link>https://comparison.metacog.co.kr/posts/2026-08-03-digital-signature-vs-digital-certificate-proving-data-vs-pro/</link><pubDate>Mon, 03 Aug 2026 04:32:15 +0900</pubDate><guid>https://comparison.metacog.co.kr/posts/2026-08-03-digital-signature-vs-digital-certificate-proving-data-vs-pro/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;A &lt;strong class="kw"&gt;digital signature&lt;/strong&gt; is a cryptographic value that proves a specific piece of data is authentic and unaltered, generated by encrypting a hash with a private key. A &lt;strong class="kw"&gt;digital certificate&lt;/strong&gt; is a CA-issued document that binds a public key to an identity, giving others a trusted way to know whose key they&amp;rsquo;re using. Confusing the two leads to designs that either can&amp;rsquo;t verify who signed something or can&amp;rsquo;t verify what was actually signed.&lt;/p&gt;</description></item><item><title>Hashing vs Encryption: One-Way Digest or Reversible Secret?</title><link>https://comparison.metacog.co.kr/posts/2026-08-03-hashing-vs-encryption-one-way-digest-or-reversible-secret/</link><pubDate>Mon, 03 Aug 2026 04:16:55 +0900</pubDate><guid>https://comparison.metacog.co.kr/posts/2026-08-03-hashing-vs-encryption-one-way-digest-or-reversible-secret/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Hashing and encryption both scramble data into something unreadable, but they solve different problems: hashing is a &lt;strong class="kw"&gt;one-way&lt;/strong&gt; function used to verify that data hasn&amp;rsquo;t changed, while encryption is a &lt;strong class="kw"&gt;reversible&lt;/strong&gt; process used to keep data secret from unauthorized parties. Mixing them up — like encrypting passwords instead of hashing them — is a common and dangerous mistake.&lt;/p&gt;
&lt;h2 id="comparison-diagram"&gt;Comparison Diagram&lt;/h2&gt;
&lt;div class="compare-diagram"&gt;
&lt;svg viewBox="0 0 640 360" xmlns="http://www.w3.org/2000/svg"&gt;&lt;defs&gt;&lt;marker id="arrowA" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse"&gt;&lt;path d="M0,0 L10,5 L0,10 z" style="fill:var(--compare-a)"/&gt;&lt;/marker&gt;&lt;marker id="arrowB" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse"&gt;&lt;path d="M0,0 L10,5 L0,10 z" style="fill:var(--compare-b)"/&gt;&lt;/marker&gt;&lt;/defs&gt;&lt;line x1="330" y1="20" x2="330" y2="340" style="stroke:var(--border)" stroke-width="1.5" stroke-dasharray="4 4"/&gt;&lt;text x="170" y="30" text-anchor="middle" style="fill:var(--primary)" font-size="20" font-weight="bold"&gt;Hashing&lt;/text&gt;&lt;text x="490" y="30" text-anchor="middle" style="fill:var(--primary)" font-size="20" font-weight="bold"&gt;Encryption&lt;/text&gt;&lt;rect x="80" y="50" width="180" height="40" rx="6" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="170" y="75" text-anchor="middle" style="fill:var(--content)" font-size="13"&gt;Input (any length)&lt;/text&gt;&lt;line x1="170" y1="90" x2="170" y2="106" style="stroke:var(--compare-a)" stroke-width="2" marker-end="url(#arrowA)"/&gt;&lt;rect x="80" y="110" width="180" height="40" rx="6" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="170" y="135" text-anchor="middle" style="fill:var(--content)" font-size="13"&gt;Hash Function&lt;/text&gt;&lt;line x1="170" y1="150" x2="170" y2="166" style="stroke:var(--compare-a)" stroke-width="2" marker-end="url(#arrowA)"/&gt;&lt;rect x="80" y="170" width="180" height="40" rx="6" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="170" y="195" text-anchor="middle" style="fill:var(--content)" font-size="13"&gt;Digest (fixed length)&lt;/text&gt;&lt;line x1="170" y1="210" x2="170" y2="226" style="stroke:var(--compare-a)" stroke-width="2" marker-end="url(#arrowA)"/&gt;&lt;circle cx="170" cy="253" r="22" style="fill:none;stroke:var(--compare-a)" stroke-width="2"/&gt;&lt;line x1="155" y1="238" x2="185" y2="268" style="stroke:var(--compare-a)" stroke-width="2"/&gt;&lt;text x="170" y="296" text-anchor="middle" style="fill:var(--secondary)" font-size="12"&gt;irreversible, no key&lt;/text&gt;&lt;text x="170" y="340" text-anchor="middle" style="fill:var(--secondary)" font-size="11"&gt;Purpose: integrity &amp;amp; verification&lt;/text&gt;&lt;rect x="400" y="50" width="180" height="40" rx="6" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="490" y="75" text-anchor="middle" style="fill:var(--content)" font-size="13"&gt;Plaintext&lt;/text&gt;&lt;line x1="490" y1="90" x2="490" y2="106" style="stroke:var(--compare-b)" stroke-width="2" marker-end="url(#arrowB)"/&gt;&lt;rect x="400" y="110" width="180" height="40" rx="6" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="490" y="135" text-anchor="middle" style="fill:var(--content)" font-size="13"&gt;Encrypt (+ key)&lt;/text&gt;&lt;line x1="490" y1="150" x2="490" y2="166" style="stroke:var(--compare-b)" stroke-width="2" marker-end="url(#arrowB)"/&gt;&lt;rect x="400" y="170" width="180" height="40" rx="6" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="490" y="195" text-anchor="middle" style="fill:var(--content)" font-size="13"&gt;Ciphertext&lt;/text&gt;&lt;line x1="490" y1="210" x2="490" y2="226" style="stroke:var(--compare-b)" stroke-width="2" marker-end="url(#arrowB)"/&gt;&lt;rect x="400" y="230" width="180" height="40" rx="6" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="490" y="255" text-anchor="middle" style="fill:var(--content)" font-size="13"&gt;Decrypt (+ key)&lt;/text&gt;&lt;line x1="490" y1="270" x2="490" y2="286" style="stroke:var(--compare-b)" stroke-width="2" marker-end="url(#arrowB)"/&gt;&lt;rect x="400" y="290" width="180" height="40" rx="6" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="490" y="315" text-anchor="middle" style="fill:var(--content)" font-size="13"&gt;Plaintext (recovered)&lt;/text&gt;&lt;text x="490" y="340" text-anchor="middle" style="fill:var(--secondary)" font-size="11"&gt;Purpose: confidentiality&lt;/text&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id="comparison-table"&gt;Comparison Table&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Hashing&lt;/th&gt;
&lt;th&gt;Encryption&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Core operation&lt;/td&gt;
&lt;td&gt;Transforms input into a fixed-length digest&lt;/td&gt;
&lt;td&gt;Transforms plaintext into ciphertext&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reversibility&lt;/td&gt;
&lt;td&gt;One-way; original input cannot be recovered&lt;/td&gt;
&lt;td&gt;Two-way; ciphertext decrypts back to plaintext&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Key requirement&lt;/td&gt;
&lt;td&gt;No key needed for a standard hash function&lt;/td&gt;
&lt;td&gt;Requires a secret key (or key pair)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output size&lt;/td&gt;
&lt;td&gt;Fixed-length digest regardless of input size&lt;/td&gt;
&lt;td&gt;Ciphertext length scales with plaintext size&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Determinism&lt;/td&gt;
&lt;td&gt;Same input always produces the same digest&lt;/td&gt;
&lt;td&gt;Same plaintext yields different ciphertext each run via IV/nonce&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Primary goal&lt;/td&gt;
&lt;td&gt;Integrity verification and data identification&lt;/td&gt;
&lt;td&gt;Confidentiality of data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main failure mode&lt;/td&gt;
&lt;td&gt;Collision: two inputs producing the same digest&lt;/td&gt;
&lt;td&gt;Key compromise, exposing all encrypted data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical use cases&lt;/td&gt;
&lt;td&gt;Password storage, checksums, digital signatures&lt;/td&gt;
&lt;td&gt;Securing data at rest and in transit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="key-differences"&gt;Key Differences&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Hashing is &lt;strong class="kw"&gt;one-way&lt;/strong&gt;; encryption is designed to be &lt;strong class="kw"&gt;reversible&lt;/strong&gt; with the correct key.&lt;/li&gt;
&lt;li&gt;Encryption always requires a &lt;strong class="kw"&gt;secret key&lt;/strong&gt;; standard hashing needs none.&lt;/li&gt;
&lt;li&gt;A hash always produces a &lt;strong class="kw"&gt;fixed-length digest&lt;/strong&gt;, no matter how large the input is.&lt;/li&gt;
&lt;li&gt;Hashing protects &lt;strong class="kw"&gt;integrity&lt;/strong&gt;; encryption protects &lt;strong class="kw"&gt;confidentiality&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A hash function must resist &lt;strong class="kw"&gt;collisions&lt;/strong&gt;; a cipher must resist key or plaintext recovery.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="when-to-use-each"&gt;When to Use Each&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Hashing&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Symmetric vs Asymmetric Encryption: One Key or Two</title><link>https://comparison.metacog.co.kr/posts/2026-08-03-symmetric-vs-asymmetric-encryption-one-key-or-two/</link><pubDate>Mon, 03 Aug 2026 04:15:44 +0900</pubDate><guid>https://comparison.metacog.co.kr/posts/2026-08-03-symmetric-vs-asymmetric-encryption-one-key-or-two/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Symmetric encryption uses a single &lt;strong class="kw"&gt;shared secret key&lt;/strong&gt; for both locking and unlocking data, making it fast but dependent on securely distributing that key beforehand. Asymmetric encryption uses a mathematically linked &lt;strong class="kw"&gt;key pair&lt;/strong&gt; — public and private — solving the distribution problem at the cost of heavier computation.&lt;/p&gt;
&lt;h2 id="comparison-diagram"&gt;Comparison Diagram&lt;/h2&gt;
&lt;div class="compare-diagram"&gt;
&lt;svg viewBox="0 0 640 360" xmlns="http://www.w3.org/2000/svg"&gt;&lt;line x1="320" y1="20" x2="320" y2="340" style="stroke:var(--border)" stroke-width="1.5" stroke-dasharray="4 4"/&gt;&lt;text x="160" y="36" text-anchor="middle" style="fill:var(--primary)" font-size="18" font-weight="bold"&gt;Symmetric&lt;/text&gt;&lt;text x="480" y="36" text-anchor="middle" style="fill:var(--primary)" font-size="18" font-weight="bold"&gt;Asymmetric&lt;/text&gt;&lt;rect x="40" y="70" width="90" height="50" rx="6" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="85" y="100" text-anchor="middle" style="fill:var(--content)" font-size="13"&gt;Alice&lt;/text&gt;&lt;rect x="40" y="240" width="90" height="50" rx="6" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="85" y="270" text-anchor="middle" style="fill:var(--content)" font-size="13"&gt;Bob&lt;/text&gt;&lt;path d="M85 120 L85 240" style="stroke:var(--compare-a)" stroke-width="1.5" fill="none" marker-end="url(#arrowA)" marker-start="url(#arrowA)"/&gt;&lt;circle cx="155" cy="140" r="12" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;rect x="149" y="150" width="12" height="14" rx="2" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;circle cx="155" cy="220" r="12" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;rect x="149" y="230" width="12" height="14" rx="2" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="195" y="185" text-anchor="middle" style="fill:var(--secondary)" font-size="12"&gt;same key&lt;/text&gt;&lt;text x="195" y="200" text-anchor="middle" style="fill:var(--secondary)" font-size="12"&gt;shared secretly&lt;/text&gt;&lt;rect x="360" y="70" width="90" height="50" rx="6" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="405" y="100" text-anchor="middle" style="fill:var(--content)" font-size="13"&gt;Sender&lt;/text&gt;&lt;rect x="360" y="240" width="90" height="50" rx="6" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="405" y="270" text-anchor="middle" style="fill:var(--content)" font-size="13"&gt;Receiver&lt;/text&gt;&lt;circle cx="475" cy="95" r="12" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;rect x="469" y="105" width="12" height="14" rx="2" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="540" y="100" text-anchor="middle" style="fill:var(--secondary)" font-size="12"&gt;public key&lt;/text&gt;&lt;text x="540" y="114" text-anchor="middle" style="fill:var(--secondary)" font-size="12"&gt;(shared openly)&lt;/text&gt;&lt;circle cx="475" cy="245" r="12" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="2.5"/&gt;&lt;rect x="469" y="255" width="12" height="14" rx="2" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="2.5"/&gt;&lt;text x="540" y="250" text-anchor="middle" style="fill:var(--secondary)" font-size="12"&gt;private key&lt;/text&gt;&lt;text x="540" y="264" text-anchor="middle" style="fill:var(--secondary)" font-size="12"&gt;(kept secret)&lt;/text&gt;&lt;path d="M405 120 L405 240" style="stroke:var(--compare-b)" stroke-width="1.5" fill="none" marker-end="url(#arrowB)"/&gt;&lt;text x="405" y="180" text-anchor="middle" style="fill:var(--secondary)" font-size="12"&gt;encrypted with&lt;/text&gt;&lt;text x="405" y="195" text-anchor="middle" style="fill:var(--secondary)" font-size="12"&gt;public key&lt;/text&gt;&lt;defs&gt;&lt;marker id="arrowA" markerWidth="8" markerHeight="8" refX="4" refY="4" orient="auto"&gt;&lt;path d="M0 0 L8 4 L0 8 z" style="fill:var(--compare-a)"/&gt;&lt;/marker&gt;&lt;marker id="arrowB" markerWidth="8" markerHeight="8" refX="4" refY="4" orient="auto"&gt;&lt;path d="M0 0 L8 4 L0 8 z" style="fill:var(--compare-b)"/&gt;&lt;/marker&gt;&lt;/defs&gt;&lt;text x="160" y="330" text-anchor="middle" style="fill:var(--secondary)" font-size="12"&gt;1 key, both directions&lt;/text&gt;&lt;text x="480" y="330" text-anchor="middle" style="fill:var(--secondary)" font-size="12"&gt;2 keys, one direction each&lt;/text&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id="comparison-table"&gt;Comparison Table&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Symmetric Encryption&lt;/th&gt;
&lt;th&gt;Asymmetric Encryption&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Key setup&lt;/td&gt;
&lt;td&gt;One shared secret key generated for both parties&lt;/td&gt;
&lt;td&gt;Mathematically linked key pair: public key and private key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Key distribution&lt;/td&gt;
&lt;td&gt;Requires a secure channel to exchange the key beforehand&lt;/td&gt;
&lt;td&gt;Public key can be freely published; private key never leaves its owner&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Encryption operation&lt;/td&gt;
&lt;td&gt;Same key encrypts the plaintext&lt;/td&gt;
&lt;td&gt;Sender encrypts using the recipient&amp;rsquo;s public key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Decryption operation&lt;/td&gt;
&lt;td&gt;Same key decrypts the ciphertext&lt;/td&gt;
&lt;td&gt;Recipient decrypts using their own private key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Fast, low CPU overhead, suited to large volumes of data&lt;/td&gt;
&lt;td&gt;Computationally expensive, orders of magnitude slower&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Key scalability&lt;/td&gt;
&lt;td&gt;Number of keys needed grows quadratically with participants&lt;/td&gt;
&lt;td&gt;Each participant needs only one key pair regardless of participant count&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Common algorithms&lt;/td&gt;
&lt;td&gt;AES, ChaCha20, 3DES&lt;/td&gt;
&lt;td&gt;RSA, ECC, Diffie-Hellman&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical use case&lt;/td&gt;
&lt;td&gt;Bulk data encryption: disks, files, VPN tunnels&lt;/td&gt;
&lt;td&gt;Key exchange, digital signatures, certificate/identity verification&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="key-differences"&gt;Key Differences&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Symmetric uses a single &lt;strong class="kw"&gt;shared key&lt;/strong&gt;; asymmetric uses a &lt;strong class="kw"&gt;key pair&lt;/strong&gt; of public and private keys&lt;/li&gt;
&lt;li&gt;Symmetric is far &lt;strong class="kw"&gt;faster&lt;/strong&gt;, making it practical for encrypting large payloads&lt;/li&gt;
&lt;li&gt;Asymmetric eliminates the &lt;strong class="kw"&gt;key distribution problem&lt;/strong&gt; since the public key can be shared openly&lt;/li&gt;
&lt;li&gt;Real-world protocols like TLS use a &lt;strong class="kw"&gt;hybrid approach&lt;/strong&gt;, using asymmetric encryption to exchange a symmetric session key&lt;/li&gt;
&lt;li&gt;Only asymmetric keys support &lt;strong class="kw"&gt;digital signatures&lt;/strong&gt; for authenticity and non-repudiation&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="when-to-use-each"&gt;When to Use Each&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Symmetric Encryption&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>