ข้ามไปยังเนื้อหาหลัก

การเข้ารหัสแบบ Symmetric Key

ในบทเรียนนี้เราจะดู symmetric key cryptography ซึ่งรักษาความปลอดภัยข้อมูลส่วนใหญ่ที่อยู่นิ่งและกำลังส่งผ่านด้วยประสิทธิภาพของมัน

ภายในสิ้นบทเรียนเราจะได้ครอบคลุม:

  • Symmetric key cryptography คืออะไร
  • ตัวอย่าง Python code ที่แสดงการใช้งาน symmetric key cryptography
  • การมองที่การประยุกต์ใช้ symmetric key cryptography
  • การประยุกต์ใช้ symmetric key cryptography
  • ความปลอดภัยของ symmetric key cryptography
  • ภัยคุกคามต่ออัลกอริทึมเหล่านี้จากทั้งคอมพิวเตอร์แบบ classical และ quantum

บทนำสู่ symmetric key cryptography

Symmetric key cryptography (SKC) เป็นรูปแบบ cryptography ที่เก่าแก่และเป็นธรรมชาติที่สุด ด้วย SKC ข้อมูลลับได้รับการรักษาความปลอดภัยผ่าน symmetric key encryption (SKE) นั่นคือการใช้ กุญแจลับเดียว สำหรับทั้งการเข้ารหัสและถอดรหัส

SKC เกี่ยวข้องกับ:

  • ฟังก์ชัน encryption ที่แปลง plain text ที่กำหนดให้เป็น ciphertext โดยใช้กุญแจลับ
  • ฟังก์ชัน decryption ที่ invert การดำเนินการโดยแปลง ciphertext กลับเป็น plain text โดยใช้กุญแจลับเดิม

Plain text อาจหมายถึงข้อมูลที่ไม่ได้เข้ารหัสใดๆ เช่น ข้อความภาษาธรรมชาติหรือ binary code ที่เนื้อหาสามารถเข้าถึงได้โดยตรงตามหลักการ ในขณะที่ ciphertext หมายถึงข้อมูลที่เข้ารหัสซึ่งเนื้อหาตั้งใจให้ไม่สามารถเข้าถึงได้ก่อน decryption

อัลกอริทึมที่อธิบายการดำเนินการ encryption และ decryption โดยใช้ shared secret key เรียกอีกอย่างว่า symmetric cipher

รูปที่ 1: Symmetric key encryption ของ plaintext ที่กำหนดให้เป็น ciphertext และ decryption กลับเป็น plaintext โดยใช้กุญแจเดิม

รูปที่ 1 Symmetric key encryption ของ plain text ที่กำหนดให้เป็น ciphertext และ decryption กลับเป็น plain text โดยใช้กุญแจเดิม

คุณสมบัติของ symmetric key cryptosystems

symmetric key cryptosystem ควรรับประกันคุณสมบัติต่อไปนี้เพื่อรักษาความปลอดภัย messages ทั้งข้อมูลที่จัดเก็บแบบ static และ/หรือการสื่อสารผ่านช่องทางส่ง:

  • Confidentiality: หมายถึงคุณสมบัติที่ว่าเนื้อหาของ messages ที่เข้ารหัสได้รับการป้องกันจากการเข้าถึงโดยไม่ได้รับอนุญาต
  • Integrity: หมายถึงคุณสมบัติที่ว่าการปรับเปลี่ยน messages ที่เข้ารหัสระหว่างการจัดเก็บหรือส่งสามารถตรวจพบได้
  • Authenticity: หมายถึงคุณสมบัติที่ว่าผู้รับ message สามารถตรวจสอบ identity ของผู้ส่งและตรวจพบการแอบอ้างตัวโดยบุคคลที่ไม่ได้รับอนุญาต

นอกจากนี้ คุณสมบัติเหล่านี้ควรรับรู้ในการตั้งค่าที่อัลกอริทึมหรือ ciphers ที่ใช้สำหรับ encryption และ decryption อาจเป็นสาธารณะ และที่การเข้าถึงเนื้อหาของ messages ที่เข้ารหัสถูกควบคุมโดยเฉพาะผ่านการเข้าถึงกุญแจลับ

ดังนั้นการ implement symmetric key cryptosystem ที่ปลอดภัยจึงเกี่ยวข้องกับงานหลักสองอย่าง:

  1. ใช้ symmetric key encryption algorithm ที่แข็งแกร่งซึ่งทนทานต่อ cryptographic attacks
  2. รับประกัน confidentiality ในการกระจายและจัดการกุญแจลับ

ในบทเรียนนี้ เราจะอภิปรายถึงลักษณะที่เกี่ยวข้องกับงานแรก ซึ่งเป็นความกังวลหลักของ SKC technology งานที่สอง อย่างไรก็ตาม ต้องการ solutions ที่อยู่นอก SKC เองและจะถูกแนะนำในภายหลัง

ตัวอย่าง symmetric key encryption ด้วย Python

เราแสดงตัวอย่างง่ายๆ ของการดำเนินการ encrypt และ decrypt โดยใช้ Caesar shift cipher แบบ classical และ Advanced Encryption System (AES) สมัยใหม่ ซึ่งเป็นมาตรฐานสำหรับ symmetric key encryption ตั้งแต่ปี 2001 อันดับแรกเราตั้งค่า Python libraries บางส่วนที่ให้ symmetric key encryption ciphers ที่จำเป็น แล้วกำหนด plain text ที่เราต้องการ encrypt

# Added by doQumentation — required packages for this notebook
!pip install -q cryptography numpy secretpy
# Install the library if needed
# %pip install secretpy

# import the required crypto functions which will be demonstrated later
from secretpy import Caesar
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from functools import reduce
import numpy as np

# Set the plaintext we want to encrypt
plaintext = "this is a strict top secret message for intended recipients only"
print(f"\nGiven plaintext: {plaintext}")

เราจะดูวิธี encrypt และ decrypt โดยใช้สอง symmetric key encryption methods ที่แตกต่างกัน:

  1. Caesar shift cipher แบบ classic
  2. Advanced Encryption Standard AES-256 protocol สมัยใหม่

Caesar shift cipher:

Caesar shift encryption เกี่ยวข้องกับการกำหนด

  • alphabet ของตัวอักษรที่เป็นไปได้ในการ encode
  • shift value ซึ่งอยู่ระหว่าง 0 (ไม่เข้ารหัส) และความยาวของ alphabet เราถือว่านี่เป็น กุญแจ

มันเรียกว่า monoalphabetic substitution cipher เนื่องจากแต่ละตัวอักษรของ plain text ถูกแทนที่ด้วยอีกตัวในรหัส ciphertext

ในตัวอย่างนี้เราจะใช้ตัวอักษรพิมพ์เล็กของ alphabet

ลองเริ่มตั้งค่ากัน

# initialize the required python object for doing Caesar shift encryption
caesar_cipher = Caesar()

# Define the shift, ie the key
caesar_key = 5
print(f"Caesar shift secret key: {caesar_key}")

# Define the alphabet
alphabet = (
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
" ",
)
print(f"alphabet: {alphabet}")

Encrypt plain text เพื่อให้ได้ ciphertext สำหรับ Caesar cipher

caeser_ciphertext = caesar_cipher.encrypt(plaintext, caesar_key, alphabet)
print(f"Encrypted caeser shift ciphertext: {caeser_ciphertext}")

Decrypt ciphertext กลับเป็น plain text ต้นฉบับโดยใช้กุญแจเดิมที่ใช้ encrypt

caeser_plaintext = caesar_cipher.decrypt(caeser_ciphertext, caesar_key, alphabet)
print(f"Decrypted caeser shift plaintext: {caeser_plaintext}\n")

Advanced encryption standard (AES) cipher

ตอนนี้เรา encrypt plain text โดยใช้ AES ซึ่งเป็น symmetric key encryption algorithm ที่นิยม

เราเริ่มต้นด้วยการสร้างกุญแจ ในกรณีนี้ random string 16 ตัวอักษร

# lambda defines an inline function in this case that takes two values a,b with the resulting expression of a+b
# reduce uses a two-argument function(above), and applies this to all the entries in the list (random alphabet characters) cumulatively
aes_key = reduce(lambda a, b: a + b, [np.random.choice(alphabet) for i in range(16)])

print(f"AES secret key: {aes_key}")

AES รองรับหลาย operating modes และต้องการให้เราระบุว่าจะใช้อันไหน

เราเลือก Cipher Block Chaining (CBC) mode ที่ให้โดย class modes.CBC ของ library cryptography CBC mode ของ AES ใช้ความสุ่มเพื่อความปลอดภัยเพิ่มเติม สิ่งนี้ต้องการการระบุ random Initialization Vector (IV) ซึ่งเรียกอีกอย่างว่า nonce เราจะใช้ random string สำหรับสิ่งนี้ด้วย เหมือนที่เราทำกับกุญแจ

aes_initialization_vector = reduce(
lambda a, b: a + b, [np.random.choice(alphabet) for i in range(16)]
)
print(f"AES initialization vector: {aes_initialization_vector}")

ตอนนี้เราสามารถ instantiate AES cipher ในนามของผู้ส่ง secret message โปรดทราบว่า initialization vector ถูกส่งไปยัง class modes.CBC เพื่อตั้งค่า CBC mode ของการดำเนินการ

จากนั้นเราจะ encrypt plain text เพื่อส่ง

# The encryptor is setup using the key and CBC. In both cases we need to convert the string (utf-8) into bytes
sender_aes_cipher = Cipher(
algorithms.AES(bytes(aes_key, "utf-8")),
modes.CBC(bytes(aes_initialization_vector, "utf-8")),
)
aes_encryptor = sender_aes_cipher.encryptor()

# update can add text to encypt in chunks, and then finalize is needed to complete the encryption process
aes_ciphertext = (
aes_encryptor.update(bytes(plaintext, "utf-8")) + aes_encryptor.finalize()
)

# Note the output is a string of bytes
print(f"Encrypted AES ciphertext: {aes_ciphertext}")

เพื่อถอดรหัส ให้เรา instantiate AES cipher ในนามของผู้รับ โปรดทราบว่าผู้รับที่ตั้งใจมีสิทธิ์เข้าถึงทั้งกุญแจลับและ initialization vector แต่อันหลังไม่จำเป็นต้องเป็นความลับ

# Similar setup of AES to what we did for encryption, but this time, for decryption
receiver_aes_cipher = Cipher(
algorithms.AES(bytes(aes_key, "utf-8")),
modes.CBC(bytes(aes_initialization_vector, "utf-8")),
)
aes_decryptor = receiver_aes_cipher.decryptor()

# Do the decryption
aes_plaintext_bytes = aes_decryptor.update(aes_ciphertext) + aes_decryptor.finalize()

# convert back to a character string (we assume utf-8)
aes_plaintext = aes_plaintext_bytes.decode("utf-8")

print(f"Decrypted AES plaintext: {aes_plaintext}")

การประยุกต์ใช้ symmetric key cryptography

ในขณะที่ classical ciphers เช่น Caesar cipher เลิกใช้ไปนานแล้ว modern symmetric cryptosystems เช่น AES ถูกใช้งานในแอปพลิเคชันที่หลากหลาย รวมถึง:

  1. Data encryption และ decryption: SKC ถูกใช้งานอย่างแพร่หลายเพื่อป้องกันข้อมูลที่ละเอียดอ่อน ไม่ว่าจะจัดเก็บแบบ static บนอุปกรณ์หรือส่งผ่านเครือข่าย ตัวอย่างได้แก่ การป้องกัน user credentials, การ encrypt email messages และการรักษาความปลอดภัย financial transactions เป็นต้น

  2. Secure communication: protocols การสื่อสารทั่วไปเช่น SSL/TLS ใช้การผสมผสานของ symmetric และ asymmetric key encryption เพื่อรับประกัน confidentiality และ integrity ของข้อมูลที่แลกเปลี่ยนระหว่างสองฝ่าย messages เหล่านี้ถูก encrypt และ decrypt โดยใช้ symmetric key encryption ซึ่งใช้ shared key กุญแจที่ใช้ใน symmetric key encryption ถูกแลกเปลี่ยนอย่างปลอดภัยโดยใช้ asymmetric key encryption ซึ่งใช้คู่ public-private key Symmetric key encryption เร็วกว่ามากและจึงสามารถใช้สำหรับ encryption ของ messages ขนาดใหญ่

  3. Authenticity verification: ในบางการตั้งค่า SKC ถูกใช้งานผ่านเทคนิคเช่น message authentication codes (MACs) และ keyed-hash MACs (HMAC) เพื่อตรวจสอบ authenticity และ integrity ของ messages รับประกันการสื่อสารที่ทนทานต่อการแก้ไข

  4. File และ disk encryption: ซอฟต์แวร์ full-disk encryption และเครื่องมือ file encryption ใช้ SKC เพื่อป้องกันข้อมูลที่ละเอียดอ่อนที่จัดเก็บบน hard disks หรืออุปกรณ์จัดเก็บข้อมูลแบบพกพา

  5. Virtual private networks: เทคโนโลยี VPN ที่มีเป้าหมายในการให้ช่องทางการสื่อสารที่ลับไม่ถูก eavesdrop สามารถใช้ symmetric หรือ asymmetric key encryption เพื่อเชื่อมต่อ remote users รวมถึงเครือข่ายขององค์กร

แอปพลิเคชันที่หลากหลายที่ SKC ถูกใช้งานในทางกลับกันกำหนดให้ symmetric cryptosystems ตอบสนองเกณฑ์บางอย่าง

หลักการของ symmetric key encryption

ในส่วนนี้ เราจะอภิปรายถึงหลักการพื้นฐานที่เป็นพื้นฐานของความปลอดภัยของ symmetric key encryption algorithms บางส่วน

การทนทานต่อ brute force attack: ข้อกำหนดพื้นฐานที่สุดสำหรับความปลอดภัยของ encryption cipher คือขนาด key space ซึ่งหมายถึงจำนวน keys ที่แตกต่างกันที่เป็นไปได้ซึ่งบุคคลที่ใช้อัลกอริทึมอาจเลือกต้องมีขนาดใหญ่มาก

การทนทานต่อ cryptanalytic attack: ข้อกำหนดพื้นฐานที่สองสำหรับ cipher ไม่ว่า symmetric หรืออย่างอื่น คือต้องสามารถสร้าง ciphertexts ที่ ยากต่อการเข้าใจ ในเชิงข้อมูล เพื่อให้บรรลุเป้าหมายนี้ เงื่อนไขที่จำเป็นแต่ไม่เพียงพอจากมุมมองทฤษฎีข้อมูลคือ ciphertexts ควรมีลักษณะเด่นคือ entropy สูง ทำให้แยกไม่ออกจาก random text ที่ไม่มีรูปแบบหรือ correlations ที่สังเกตเห็นได้ ด้วยวิธีนี้ ผู้โจมตีไม่ได้รับข้อมูลเกี่ยวกับ plain text หรือกุญแจลับจากการพยายามวิเคราะห์ ciphertext โดยใช้ frequency analysis หรือเทคนิคทางสถิติอื่นๆ

ความทนทานต่อรูปแบบทั่วไปของ cryptanalytic attacks ที่เพียงพอเพื่อรับประกัน semantic security ถูกทำให้เป็นทางการผ่านแนวคิด indistinguishability แม้ว่าจะมีหลาย variants ของ indistinguishability ที่มีข้อกำหนดต่างกัน symmetric cryptosystem ถือว่า semantically secure ถ้าตอบสนองเกณฑ์ Indistinguishability under Chosen Plain Text Attack (IND-CPA) ซึ่งหมายความว่าผู้โจมตีไม่สามารถแยกแยะระหว่างการ encryption ของ messages สองอันที่แตกต่างกัน แม้ได้รับอนุญาตให้ส่ง plain texts หลายอันตามต้องการไปยังอัลกอริทึมและดู ciphertexts ที่สอดคล้องกัน

ดังที่เราจะพิจารณาในภายหลัง IND-CPA โดยทั่วไปต้องการการใช้ความสุ่มเพื่อให้แน่ใจว่าทุกครั้งที่ plain text ที่กำหนดถูก encrypt ด้วยกุญแจลับที่กำหนด ciphertext ที่ได้จะต่างกันอย่างไม่สามารถคาดเดาได้สำหรับแต่ละ encryption

Failure modes ของ classical ciphers: ก่อนการถือกำเนิดของ modern cryptography ในช่วงทศวรรษ 1970 classical ciphers ส่วนใหญ่ที่ใช้ในทางปฏิบัติล้มเหลวในการตอบสนองข้อกำหนดข้างต้นหนึ่งหรือทั้งสองข้อ ตัวอย่างเช่น substitution ciphers ยุคแรกเช่น monoalphabetic Caesar shift cipher มีลักษณะทั้งขนาด key space เล็ก (ดู Table 1) และ ciphertext entropy ต่ำ ทำให้ไม่ปลอดภัยต่อ cryptanalytic attacks หลากหลายเช่น brute force attacks, frequency analysis และ known-plain-text (KPT) attacks

polyalphabetic substitution ciphers ที่ตามมาเช่น Vigenère cipher และ Enigma machine cipher มีขนาด key space ที่มีประสิทธิผลขนาดใหญ่ ทำให้ทนทานต่อ brute force attacks แต่อ่อนแอต่อ frequency analysis และ KPT attacks ตามลำดับ ในทำนองเดียวกับ substitution ciphers classic transposition ciphers ที่เรียงตัวอักษรใหม่แทนที่จะแทนที่ ก็ถูกบุกรุกได้ด้วย attacks หลากหลายเช่น anagramming, statistical analysis, brute force และ KPT attacks เป็นต้น

ในทางทฤษฎี polyalphabetic substitution cipher ที่รู้จักกันว่า one-time pad (OTP) ทราบกันดีว่า cryptographically secure OTP มีกุญแจลับที่ควร (1) ประกอบด้วยตัวอักษรหรือบิตที่เลือกแบบสุ่ม (2) ยาวอย่างน้อยเท่ากับ plain text ต้นฉบับ และ (3) ใช้เพียงครั้งเดียว OTP ไม่ใช้งานได้จริงสำหรับแอปพลิเคชันจริงๆ เพราะถ้ากุญแจลับซึ่งต้องยาวเท่ากับ plain text และใช้ได้เพียงครั้งเดียวสามารถแบ่งปันได้อย่างปลอดภัย ก็สามารถแบ่งปัน plain text ต้นฉบับได้เช่นกัน OTP แสดงให้เห็นถึงประโยชน์ของความสุ่มในการสร้าง secure ciphertexts

ผู้โจมตีที่พยายาม implement brute force search ผ่าน key space เพื่อหากุญแจที่ถอดรหัส message ต้องดำเนินการจำนวน operations ที่เป็นสัดส่วนกับขนาด key space

ดังนั้น ขนาด key space ขนาดใหญ่ให้ความทนทานต่อ brute force attacks โดยทำให้ไม่สามารถทำได้ในเชิงคำนวณ Table 1 แสดงขนาด key space ของ ciphers ที่มีชื่อเสียงบางอย่าง

Table 1: ขนาด key space ของ symmetric ciphers บางอย่าง

CipherKey lengthKey space size
Caeser shift1alphabet-size
Vigenerenalphabet-sizen^\mathrm{n}
One-time-padplaintext-lengthalphabet-sizeplaintextlength^\mathrm{plaintext-length}
DES56256^\mathrm{56}
AES-1281282128^\mathrm{128}
AES-1921922192^\mathrm{192}
AES-2562562256^\mathrm{256}
ChaCha202562256^\mathrm{256}
Modern symmetric key encryption schemes ส่วนใหญ่เอาชนะข้อจำกัดของ classical ciphers พวกมันผลิต ciphertext ที่ทนทานต่อ cryptanalysis และมีขนาด key space ขนาดใหญ่ในขณะที่มีประสิทธิภาพในทางปฏิบัติมากกว่า OTP

Block ciphers: คลาสหนึ่งของ modern ciphers เช่น DES และ AES บรรลุความปลอดภัยโดยการรวมหลักการ confusion และ diffusion ที่แนะนำโดย Claude Shannon ในตอนแรก เราอภิปรายแนวคิดเหล่านี้ในการตั้งค่าที่ encryption schemes ทำงานกับการแทนค่าแบบ binary ของ messages:

  • Confusion: Confusion คือลักษณะที่แต่ละบิตใน ciphertext ขึ้นอยู่กับหลายบิตของกุญแจลับ มันรับประกันว่าการเปลี่ยนแปลงเล็กน้อยในกุญแจลับจะเปลี่ยนแปลงเกือบทุกบิตของ ciphertext ทำให้ความสัมพันธ์ระหว่าง ciphertext และกุญแจลับไม่ชัดเจน

  • Diffusion: Diffusion คือลักษณะที่การพลิกบิตเดียวใน plain text ควรเปลี่ยนแปลงประมาณครึ่งหนึ่งของบิตใน ciphertext และในทางกลับกัน Diffusion ซ่อนความสัมพันธ์ทางสถิติระหว่าง plain text และ ciphertext Ciphers ที่มี diffusion เพียงพอตอบสนอง avalanche criterion ของ cryptography

Block ciphers implement confusion และ diffusion โดยใช้โครงสร้าง cryptographic ที่รู้จักกันว่า substitution-permutation networks (SPNs) ที่ทำงานบนบล็อกข้อมูลแบบ discrete SPN รับบล็อกของ plain text และกุญแจลับเป็น inputs และดำเนินการจำนวนที่ระบุของ rounds ของการแปลงเพื่อให้ได้บล็อก ciphertext แต่ละ round ประกอบด้วยโครงสร้างทางคณิตศาสตร์สลับกันที่รู้จักกันว่า substitution boxes (S-boxes) และ permutation boxes (P-boxes) หรือการดำเนินการที่เทียบเท่า

สิ่งเหล่านี้ตามลำดับ implement การแปลง nonlinear ที่ซับซ้อนและ linear บน input blocks นำไปสู่ avalanche effects ใน ciphertext

SPNs ได้รับการออกแบบในลักษณะที่การเพิ่มจำนวน rounds โดยทั่วไปจะเพิ่มความปลอดภัยของ cipher ซึ่งนำไปสู่แนวคิด security margin Security margin: security margin ของ SPN-based cryptographic cipher ที่กำหนดคือความแตกต่างระหว่างจำนวน rounds ใน implementation ที่สมบูรณ์ของ cipher และจำนวน rounds สูงสุดที่ทราบว่าสามารถ break ได้โดยใช้การโจมตีที่ดีที่สุดในโลกจริง

ตัวอย่างเช่น ปัจจุบันการโจมตีที่เร็วกว่า brute force ที่ดีที่สุดที่ทราบต่อ AES-256 สามารถ break ได้ถึง 9 rounds จากทั้งหมด 14 rounds ใน full cipher เมื่อใช้ใน standard mode ที่รู้จักกันว่า Electronic Codebook (ECB) mode ดังนั้น ปัจจุบัน security margin ของ AES-256 คือ 5 rounds

Stream ciphers: เป็นทางเลือกแทน block ciphers นักการเข้ารหัส modern ได้ออกแบบ stream ciphers ที่ปลอดภัยในทางปฏิบัติเช่น Chacha20 Ciphers เหล่านี้ใช้ความสุ่มเป็นส่วนพื้นฐานของการออกแบบและทำงานบน pseudorandom keystreams ของบิตแทนบล็อกข้อมูลแบบ discrete

ดังนั้น stream ciphers รวมกุญแจลับและ initialization vector (IV) เพื่อ seed pseudorandom random number generator (PRNG) เพื่อผลิต keystream ของบิตสุ่มซึ่งจากนั้นรวมกับ plain text ที่กำหนดเพื่อให้ได้ ciphertext ในแง่นี้ stream ciphers คล้ายกับ one-time pad (OTP) แต่มีความยาวกุญแจลับที่สั้นกว่าและกุญแจที่นำกลับมาใช้ใหม่ได้ ซึ่งทำให้มีประสิทธิภาพมากขึ้นในทางปฏิบัติ อย่างไรก็ตาม ด้วยเหตุผลเดียวกัน พวกมันไม่รับประกัน perfect secrecy ต่างจาก OTP

Semantic security: เราสรุปส่วนนี้โดยกลับมาที่แนวคิด semantic security หรือ IND-CPA level security ที่แนะนำข้างต้น การดำเนินการพื้นฐานที่ implement โดย block ciphers เช่น S-box และ P-box เป็น deterministic ซึ่งหมายความว่าใน standard operating modes เช่น ECB คู่ plain-text key ที่กำหนดจะให้ ciphertext เดิมเสมอ ซึ่งอ่อนแอต่อ chosen-plain-text attacks

เพื่อบรรลุ IND-CPA level security block ciphers ต้องทำงานใน mode ที่ใช้ความสุ่มที่แนะนำผ่าน pseudorandom initialization vector (IV) กับข้อกำหนดเพิ่มเติมว่าไม่มีการดำเนินการ encryption สองครั้งที่ใช้คู่ key-IV เดิม AES รองรับ modes การดำเนินการหลายอย่างเช่น cipher block chaining (CBC) ซึ่ง IND-CPA secure ข้อกำหนดที่คล้ายกันยังมีสำหรับ stream ciphers ที่คู่ key-IV เดิมไม่ควรใช้ seed PRNG มากกว่าหนึ่งครั้งถ้าต้องการ IND-CPA

หลังจากแนะนำหลักการพื้นฐานบางอย่างของ SKC เราแสดง symmetric key algorithms ที่นิยมบางอย่างเพื่อแสดงให้เห็นถึงแนวทางต่างๆ ที่ใช้ใน modern cryptosystems Block ciphers และ stream ciphers สมัยใหม่ถูกใช้งานในบริบทต่างๆ ดังที่แสดงด้านล่าง

  1. Advanced Encryption Standard: AES ที่แนะนำข้างต้นแล้วเป็น de facto standard สำหรับ SKC ในปัจจุบันเนื่องจากลักษณะความปลอดภัย ประสิทธิภาพ และ performance AES มีขนาด key คงที่ที่ 128, 192 และ 256 bits และใช้ substitution-permutation network (SPN) แบบ multiround AES ทราบกันดีว่าทนทานต่อ cryptanalytic attacks หลากหลาย AES ถูกประกาศว่าเป็น Federal Information Processing Standard (FIPS) สำหรับ symmetric key encryption ในสหรัฐอเมริกาในปี 2001`

  2. Data Encryption Standard (DES) และ Triple Data Encryption Standard (3DES): DES เป็น block cipher ที่คิดค้นโดย Horst Feistel และเพื่อนร่วมงานที่ IBM® ในช่วงทศวรรษ 1970 และใช้ SPN ที่มีกุญแจ 56-bit ค่อนข้างสั้น DES ถูกนำมาใช้เป็น FIPS สำหรับ symmetric key encryption ในสหรัฐอเมริกาจนถึงปลายทศวรรษ 1990 เมื่อมีการแสดงให้เห็นว่าสามารถ break ได้โดยใช้ brute force attacks กับ hardware เฉพาะทางเนื่องจากขนาด key space เล็ก ต่อมา 3DES ถูกแนะนำเป็นตัวแทนและใช้ DES algorithm สามครั้งด้วยกุญแจต่างกัน เพิ่มความยาวกุญแจเป็น 168 bits อย่างไรก็ตาม 3DES ส่วนใหญ่ถูกแทนที่โดย AES แล้ว

  3. Blowfish และ Twofish: Blowfish และ Twofish ที่เป็นตัวต่อ เป็น block ciphers ที่นักการเข้ารหัส Bruce Schneier เสนอในช่วงทศวรรษ 1990 Blowfish และ Twofish อนุญาต variable key lengths ถึง 448 bits และ 256 bits ตามลำดับ ให้ความยืดหยุ่นในการ tradeoff ระหว่างความปลอดภัยและ performance ต่างจาก AES พวกมันยังมี S-boxes ที่ขึ้นอยู่กับกุญแจ Twofish เป็นหนึ่งในผู้เข้ารอบสุดท้ายในการแข่งขัน NIST เพื่อเลือก Advanced Encryption Standard แต่ไม่ได้รับการเลือก อัลกอริทึมทั้งสองถือว่าปลอดภัยในปัจจุบัน

  4. Rivest Ciphers (RC2, RC4, RC5 และ RC6): ตระกูล Rivest Cipher (RC) ของ symmetric key algorithms ได้รับการออกแบบโดย Ron Rivest เริ่มตั้งแต่ทศวรรษ 1980 RC2 เป็น 64-bit block cipher ยุคแรก ในขณะที่ RC4 เป็น stream cipher ที่ใช้กันอย่างแพร่หลายใน security protocols ที่เกี่ยวข้องกับ web-traffic เนื่องจากความเรียบง่ายและความเร็ว ไม่มีอันใดที่ถือว่าปลอดภัยในปัจจุบัน RC5 และ RC6 เป็น SPN based block ciphers ที่ออกแบบด้วย block size, key size และจำนวน rounds ที่ปรับแต่งได้ เช่นเดียวกับ Twofish ด้านบน RC6 เป็นผู้เข้ารอบสุดท้ายในการแข่งขัน NIST AES และถือว่าปลอดภัย

  5. Salsa20 และ ChaCha20: Salsa20 และ ChaCha20 หมายถึงตระกูล stream ciphers ที่เกี่ยวข้องกันซึ่งนักการเข้ารหัส Daniel Bernstein ออกแบบในช่วงทศวรรษ 2000 Salsa20 เป็นส่วนหนึ่งของ portfolio profile-1 ของโครงการ eSTREAM European Union cryptographic validation ChaCha20 ซึ่งเป็นการดัดแปลงของ Salsa20 ออกแบบมาเพื่อเพิ่ม diffusion ลักษณะและ performance ปัจจุบัน ChaCha20 ถือว่าปลอดภัยและให้ performance ที่ดีกว่าในกรณีที่ไม่มี dedicated AES hardware acceleration ดังนั้น ChaCha20 จึงถูกใช้ในการตั้งค่าบางอย่างเช่น network protocols เช่น QUIC และอุปกรณ์ mobile ที่มี ARM-based CPUs

ข้อได้เปรียบของ symmetric key cryptography

หลังจากร่างคุณสมบัติของ symmetric key cryptosystems และหลักการบางอย่างที่เป็นพื้นฐานการพัฒนา เราแสดงข้อได้เปรียบหลักบางอย่างของ SKC เมื่อเทียบกับ asymmetric key cryptography ซึ่งจะอภิปรายในบทเรียนต่อมา

  1. ความเร็วและประสิทธิภาพ: Symmetric key algorithms เหมาะกว่าสำหรับการ encrypt ข้อมูลปริมาณมากหรือใช้ในสถานการณ์การสื่อสารแบบ real-time เนื่องจากโดยทั่วไปเร็วกว่าและใช้ทรัพยากรน้อยกว่า asymmetric counterparts SKC algorithms เช่น AES scale แบบ linear กับขนาดของ plain text และไม่เกี่ยวข้องกับ mathematical operations เชิงพีชคณิตที่เข้มข้น ดู Tomoiaga et al. สำหรับการทบทวนโดยละเอียดของลักษณะ performance ของ AES

  2. Scalability: เนื่องจาก computational overhead ที่ค่อนข้างต่ำ symmetric key algorithms scale ได้ดีกับจำนวน users และปริมาณข้อมูลที่กำลัง encrypt

  3. ความเรียบง่าย: Symmetric encryption protocols มักง่ายกว่าในการ implement และเข้าใจเมื่อเทียบกับแนวทาง asymmetric key ทำให้น่าสนใจสำหรับนักพัฒนาและผู้ใช้

ความท้าทายและข้อจำกัดของ symmetric key cryptography

แม้จะมีข้อได้เปรียบ symmetric key cryptography ก็มีความท้าทายและข้อจำกัดบางอย่าง:

  1. การกระจายและจัดการกุญแจ: ใน SKC ทั้งผู้ส่งและผู้รับ message ต้องมีสิทธิ์เข้าถึงกุญแจเดิม ซึ่งต้องเก็บเป็นความลับจากบุคคลที่ไม่ได้รับอนุญาต ถ้ากุญแจถูกดักจับหรือถูกบุกรุกโดยบุคคลที่สาม ความปลอดภัยของข้อมูลที่เข้ารหัสก็สูญหายไปด้วย การกระจายและจัดการกุญแจลับอย่างปลอดภัยจึงเป็นความท้าทายสำคัญ อย่างไรก็ตาม วิธีแก้ปัญหานี้อยู่นอก SKC เอง

  2. ขาด non-repudiation: Non-repudiation หมายถึงความสามารถในการพิสูจน์ว่าฝ่ายเฉพาะส่ง message ใน SKC เนื่องจากกุญแจเดิมถูกใช้ทั้งสำหรับ encryption และ decryption จึงไม่สามารถระบุได้ว่าฝ่ายใดสร้าง ciphertext เฉพาะ ในทางตรงกันข้าม asymmetric key cryptography ให้ non-repudiation ผ่านการใช้ digital signature

เพื่อจัดการกับความท้าทายเหล่านี้ symmetric key cryptography มักถูกใช้ร่วมกับ asymmetric key cryptography ตัวอย่างเช่น บ่อยครั้งใช้ asymmetric key encryption เพื่อส่ง shared secret key ที่ค่อนข้างสั้นระหว่างผู้ส่งและผู้รับอย่างปลอดภัย ซึ่งเปิดใช้งานการใช้ symmetric key encryption ในภายหลังเพื่อส่งข้อมูลและ messages ขนาดใหญ่กว่าอย่างมีประสิทธิภาพ

Quantum computing และ symmetric key encryption: ความเสี่ยงและการลดผลกระทบ

Quantum cryptography ให้ avenue ที่มีแนวโน้มสำหรับการลดความเสี่ยงในยุคดิจิทัล โดยการนำผลิตภัณฑ์ quantum-safe มาใช้ซึ่งพร้อมที่จะรักษาความปลอดภัยข้อมูลของเราต่อภัยคุกคามที่ใกล้เข้ามาของความก้าวหน้าของ quantum computing

ต่อไป เราจะอภิปรายถึงความเสี่ยงที่ quantum computers สร้างต่อ symmetric key encryption schemes ที่แนะนำในส่วนก่อนหน้าและร่าง pathways ที่เป็นไปได้บางอย่างในการลดความเสี่ยง

การโจมตี quantum cryptographic

มีสองคลาสที่แตกต่างกันของภัยคุกคาม quantum ต่อ cryptographic algorithms แบบดั้งเดิม:

  1. Quantum brute force attacks: สิ่งเหล่านี้หมายถึงสถานการณ์ที่ผู้โจมตีใช้คอมพิวเตอร์ quantum เพื่อรัน quantum algorithm เฉพาะทางเพื่อดำเนินการ brute force search ผ่าน key space ของ symmetric cipher quantum primitive ที่เกี่ยวข้องมากที่สุดสำหรับการเปิดใช้งานการโจมตีประเภทนี้คือ Grover's algorithm

  2. Quantum cryptanalytic attacks: สิ่งเหล่านี้หมายถึงสถานการณ์ที่ quantum computers ถูกใช้งานเพื่อรัน cryptanalytic attacks ที่มีเป้าหมายในการกู้คืนกุญแจลับหรือ plain text ในวิธีที่มีประสิทธิภาพมากกว่าการค้นหา brute force ความเป็นไปได้ในการดำเนินการ quantum cryptanalytic attacks ที่สำเร็จขึ้นอยู่กับปัจจัยหลายอย่างที่เกี่ยวข้องกับโครงสร้างทางคณิตศาสตร์ของ cipher ที่กำลังวิเคราะห์รวมถึงจุดอ่อนที่อาจเกิดขึ้นใน implementations เฉพาะ

กลยุทธ์การลดความเสี่ยงสำหรับการโจมตี quantum

ก่อนที่เราจะอภิปรายกลยุทธ์การลดความเสี่ยงสำหรับการโจมตี quantum มาแนะนำแนวคิดของ security level ของ cryptographic cipher:

Security level เป็นการวัดความยากในการ break cipher ที่วัดในแง่ของจำนวน computational operations ที่การ break cipher สำเร็จจะต้องการ

โดยทั่วไป security level แสดงในบิต นั่นคือโดยทั่วไป cipher ให้ N-bit security ถ้าต้องการ O(2N)\mathcal{O}(2^{N}) operations ในการ break มัน บนคอมพิวเตอร์แบบ classical ถือว่า symmetric cipher ปลอดภัยทาง cryptographically อยู่แล้ว security level โดยประมาณพ้องกับความยาวกุญแจ

ตัวอย่างเช่น security level ของ AES-128 ซึ่งมีกุญแจ 128-bit โดยทั่วไปถือว่าเป็น 128 bits เพราะจะต้องใช้ประมาณ 2128^{128} operations สำหรับผู้โจมตีที่ใช้คอมพิวเตอร์แบบ classical ในการลอง keys 128-bit ที่เป็นไปได้ทั้งหมดใน key space

การโจมตี brute force และการลดผลกระทบ

ความเสี่ยงของ quantum brute force attack: quantum brute force attack เปลี่ยนการประเมินข้างต้นเพราะ Grover's algorithm ทำให้ผู้โจมตีที่มีคอมพิวเตอร์ quantum ที่เหมาะสมสามารถค้นหา key space ของ cipher ได้ เร็วกว่าแบบ quadratic กว่าคอมพิวเตอร์แบบ classical ใดๆ

ตัวอย่างเช่น brute force attack เดิมบน AES-128 ด้วย Grover's algorithm อาจทำได้ด้วย 264^{64} operations เท่านั้น ดังนั้น security level ของ AES-128 ลดลงจาก 128 bits เป็น 64 bits เมื่อเผชิญกับผู้โจมตี quantum ที่รัน Grover search เนื่องจาก computational power โดยทั่วไปเติบโตแบบ exponential ตามเวลา ปัจจุบัน security level ที่ 64 bits ถือว่าไม่ปลอดภัย ซึ่งหมายความว่าเมื่อ quantum computers ที่มีความสามารถเพียงพอถูกสร้างขึ้น AES-128 จะต้องถูกละทิ้ง

การคำนวณแบบเดียวกันนี้ใช้กับ symmetric block หรือ stream ciphers อื่นๆ ที่ security level สำหรับความยาวกุญแจที่กำหนดถูกลดลงอย่างมีประสิทธิผลเป็นครึ่งหนึ่งโดย Grover's algorithm

การลดความเสี่ยงของ quantum brute force attack: การพิจารณาข้างต้นบ่งชี้ว่าวิธีที่ชัดเจนในการต้านทาน quantum brute force attacks คือการเพิ่มความยาวกุญแจขั้นต่ำที่ใช้สำหรับ symmetric key encryption อย่างน้อยเป็นสองเท่า

ดังนั้น เพื่อรับประกัน 128-bit security เกี่ยวกับ quantum brute force attacks ก็ใช้ ciphers เช่น AES-256 หรือ ChaCha20 ที่ใช้กุญแจ 256-bit เท่านั้น ซึ่งถือว่าปลอดภัยเพราะแม้กับ quantum computers การดำเนินการ 2128^{128} operations ในการ break ciphers ไม่สามารถทำได้จริงในอนาคตอันใกล้

แม้จะเรียบง่ายในทางทฤษฎี solution ที่เสนอในการเพิ่ม key sizes เป็นสองเท่าก็ไม่ปราศจากค่าใช้จ่าย เนื่องจาก key sizes ที่ยาวกว่าหมายถึง computational cost เพิ่มเติมสำหรับงาน encryption-decryption ประจำ พร้อมกับ performance ที่ช้าลง ความต้องการ memory มากขึ้น และการใช้พลังงานเพิ่มขึ้น

การโจมตี cryptanalytic และการลดผลกระทบ

ความเสี่ยงของ quantum cryptanalytic attacks: ความเสี่ยงต่อ symmetric key cryptosystems ที่เกิดจาก quantum cryptanalytic attacks กำลังถูกวิจัยอย่างแข็งขันโดยนักการเข้ารหัส การรวมกันของ classical และ quantum computing ขยาย array ของเครื่องมือที่ผู้โจมตีมีให้ตรวจสอบจุดอ่อนในโครงสร้างทางคณิตศาสตร์ของ ciphers และ quantum cryptanalytic attacks ใหม่จำนวนมากกำลังถูกเสนอในปัจจุบัน สิ่งเหล่านี้รวมถึง quantizations ของเทคนิค classical ที่รู้จักกันเช่น linear และ differential cryptanalysis รวมถึง attack modes ใหม่ที่ไม่มีคู่แบบ classical

การศึกษา quantum cryptanalytic ล่าสุดของ Advanced Encryption Standard (AES) พบว่า cipher ยังคงทนทานต่อ quantum cryptanalytic attacks ที่รู้จักหลากหลายและยังคงแสดง security margin post-quantum ที่เพียงพอ อย่างไรก็ตาม การศึกษาบางอย่างพบว่า symmetric ciphers หลายอย่างที่ถือว่าปลอดภัยแบบ classical ถูกบุกรุกได้ง่ายโดย quantum chosen plain text attack ดังนั้น primitives ใหม่สำหรับ symmetric key encryption ที่ออกแบบเฉพาะสำหรับยุค post-quantum จึงได้รับการเสนอด้วย

การลดความเสี่ยงของ quantum cryptanalytic attacks: เนื่องจาก quantum cryptanalysis ในฐานะสาขาวิชากำลังเป็นช่วงแรกๆ อาจเป็นไปได้ว่า post-quantum symmetric cryptography จะผ่านการพัฒนาอย่างรวดเร็วเมื่อ quantum cryptanalytic attacks ใหม่เกิดขึ้นและ ciphers ใหม่ที่ทนทานต่อพวกมันถูกเสนอและประเมิน ดังนั้น กลยุทธ์ที่ดีที่สุดในการลดความเสี่ยงของ quantum cryptanalytic attacks ในอนาคตอันใกล้คือ cryptographic agility (หรือ crypto-agility) Crypto-agility หมายถึงความสามารถของระบบข้อมูลในการนำ cryptographic primitives ทางเลือกมาใช้อย่างรวดเร็วและง่ายดายโดยไม่มีการเปลี่ยนแปลงที่สร้างความรบกวนต่อโครงสร้างพื้นฐานของระบบ

Crypto-agility ต้องการความสามารถในการแทนที่อัลกอริทึมที่ล้าสมัยที่ใช้สำหรับ encryption, decryption, digital signatures หรือฟังก์ชัน cryptographic อื่นๆ ด้วยความพยายามและความรบกวนน้อยที่สุด Crypto-agile systems จะอยู่ในตำแหน่งที่ดีในการจัดการการเปลี่ยนผ่านสู่ post-quantum symmetric key cryptography

สรุป

Symmetric key cryptography ให้ solutions ที่แข็งแกร่งและมีประสิทธิภาพสำหรับการรักษาความปลอดภัยข้อมูลดิจิทัล ความเรียบง่ายของการใช้กุญแจเดิมสำหรับทั้ง encryption และ decryption ให้ performance สูงและ scalability ทำให้ SKC เหมาะกับการใช้งานที่หลากหลาย

ความปลอดภัยของ SKC ขึ้นอยู่กับความทนทานเชิงอัลกอริทึมต่อ cryptographic attacks รวมถึงการจัดการกุญแจลับที่เหมาะสม Modern symmetric key cryptosystems รวมหลักการ confusion, diffusion และความสุ่ม ร่วมกับขนาดกุญแจที่เพียงพอ เพื่อบรรลุ semantic security การจัดการกุญแจลับ แม้จะสำคัญ แต่ไม่สามารถทำสำเร็จได้ด้วย SKC เพียงอย่างเดียว

การเข้าใจคุณสมบัติและข้อจำกัดของ SKC จะช่วยให้นักพัฒนาออกแบบ implement และ deploy solutions เทคโนโลยีสารสนเทศที่ปลอดภัยโดยใช้แนวทางที่รวมถึงขนาดกุญแจที่ยาวขึ้นตามที่จำเป็น และการใช้อัลกอริทึมใหม่

ความก้าวหน้าของ quantum computing และ quantum learning แนะนำมิติใหม่ให้กับ symmetric key cryptography Quantum computers มีศักยภาพในการ unravel ความปลอดภัยที่ classical symmetric key algorithms ให้ไว้ ซึ่งกระตุ้นความต้องการแนวทาง cryptographic ที่ทนทานต่อ quantum เพื่อรับประกัน data privacy และการป้องกันเมื่อเผชิญกับ technological landscapes ที่กำลังพัฒนา

Source: IBM Quantum docs — updated 25 มี.ค. 2569
English version on doQumentation — updated 7 พ.ค. 2569
This translation based on the English version of approx. 26 มี.ค. 2569