Skip to content

Instantly share code, notes, and snippets.

@utarn
Last active December 25, 2020 00:34
Show Gist options
  • Save utarn/7d6ec7f15be13e6b2066ecfe0fee4314 to your computer and use it in GitHub Desktop.
Save utarn/7d6ec7f15be13e6b2066ecfe0fee4314 to your computer and use it in GitHub Desktop.
Cryptography Note
Cryptography Lab
1. Symmetric encryption รหัสเดียวกันสำหรับเข้ารหัสและถอดรหัส
ข้อเด่น 1. เร็ว 2. คีย์ขนาดเล็กก็ปลอดภัย 256 บิต ก็ปลอดภัยมากๆ AES-256
ข้อเสีย 1. ส่งคีย์ข้ามอินเทอร์เน็ตยาก หรือถึงขั้นเป็นไปไม่ได้
2. Asymmetric encryption กุญแจคู่ ประกอบด้วยกุญแจส่วนตัวและกุญแจสาธารณะ
(Private key, Public key)
- ถ้าตัวใดตัวหนึ่งใช้เข้ารหัส ต้องใช้อีกตัวหนึ่งถอดรหัส
- ถ้า Public key หาย สามารถสร้างใหม่จาก Private key ได้
แต่ถ้า Private key หาย ไม่สามารถสร้างใหม่ได้
- ไม่มีกระบวนการทางคณิตศาสตร์ใดๆ ที่สามารถหา Private key จาก Public key
ข้อเด่น 1. ส่งคีย์ข้ามอินเทอร์เน็ตง่าย
ข้อเสีย 1. ช้า 2. คีย์ขนาดใหญ่มากๆ ถึงจะปลอดภัย 4096 บิต
=====================================
Use case
1. เข้ารหัสแบบสมมาตร
2. เข้ารหัสแบบอสมมาตร
2.1 การสร้าง Private Key และ Public Key
2.2 ใช้ Private key เข้ารหัส และ Public key ถอดรหัส
--> ยืนยันคนส่ง
2.3 ใช้ Public key เข้ารหัส และ Private key ถอดรหัส
--> ยืนยันคนรับ
คำถาม: ถ้าต้องการยืนยันทั้งคนรับคนส่งละ??
2.4 ใช้ Private key และ Public key เข้ารหัส จากนั้น
Private key และ Public key ถอดรหัส
A --> B
1. PublicB(PrivateA(data)) ////
^ ^
PrivateB PublicA
2. PrivateA(PublicB(data)) XXXX
^ ^
PublicA PrivateB
ถ้าเข้ารหัสชั้นเดียว rsautl
openssl smime
-> Certificate :
Public key + Private key(User Information)
DER --> binary
PEM --> BASE64
SMIME --> Email format, attachment
2.5 Mix encryption
--> ยืนยันคนรับ
1) Generate random shared key --> shared_key (32 bytes)
2) เอา shared_keyไปเข้ารหัส DATA แบบสมมาตร AES256
3) ใช้ Public key เข้ารหัส shared_key
และ Private key ถอดรหัส shared_key
4) เมื่อผู้รับได้ shared_key ก็เอา shared_key ไปถอดรหัส DATA
2.6 Message Digestion (hash, digital signature)
- hash f(x) => y
รู้ x แล้วจะรู้ y แต่ถ้ารู้ y จะไม่รู้ x
SHA256 Input เป็นเท่าไหร่ก็ช่าง Output ออกมาได้ 32 bytes
10GB --> 32 bytes
SHA256 SHA512 SHA3-256 SHA3-512
=============================
คำสั่งสุดท้ายที่ตกไปในคลิป
คัดลอกไฟล์ sample.jpg.digest
# openssl dgst -sha256 -verify PublicA.key -signature sample.jpg.digest sample.jpg
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment