HTTPS ปลอดภัยยังไง ?

Symmetric key

Chokchai Phatharamalai
odds.team
2 min readSep 12, 2019

--

แปลว่า คีย์สมมาตร นั่นคือ เข้ารหัสด้วยคีย์ไหน ก็ปลดล็อคด้วยคีย์เดิม เหมือนกุญแจบ้านของเรานี่แหละ

“Day 070 — Photo365 — Key” by UnknownNet Photography is licensed under CC BY-SA 2.0

Asymmetric key

คือ คีย์คู่ สมมติมีคีย์ 2 อัน อันนึงคือ ช้อน อีกอันคือส้อม ถ้าเราเข้ารหัสด้วยช้อน ต้องถอดรหัสด้วยส้อม หรือถ้าเข้ารหัสด้วยส้อม ตอนแกะ ก็แกะด้วยช้อน

Public/Private key

คือการเอา Asymmetric key นี่แหละ มาประยุกต์ โดยกำหนดคีย์ตัวนึงเป็น public หมายถึง เราจะแจกให้โลกรู้ แต่จะเก็บอีกคีย์ไว้กับตัว เป็น private key ไม่แบ่งใคร ซึ่งการทำแบบนี้ เราจะประยุกต์ใช้ได้ 2 กรณี คือ digital signature กับ digital envelope ก่อนอ่านต่อ ให้ลองหยุดทายเล่น ๆ ว่า digital signature ต้องเข้ารหัสด้วย public หรือ private key?

Digital signature

“Pay the Bill” by MTSOfan is licensed under CC BY-NC-SA 2.0

คือการเข้ารหัสด้วย private key (มีใครทายถูกไหมเอ่ย?) สมมติเป็น private key ของจั๊วะ ใคร ๆ ก็แกะอ่านได้ เพราะจั๊วะแจก public key ของจั๊วะให้ทั้งโลกรู้ แต่ทุกคนมั่นใจได้เลย ว่านี่คือเอกสารที่จั๊วะเขียนแน่ ๆ ไม่มีใครสามารถปลอมแปลงได้ เพราะมีจั๊วะคนเดียวที่มี private key อันนี้ ตอนที่เราสมัคร github.com แล้วเค้าให้เราเอา public key ไปใส่ใน account เรา ก็เพื่อทำ digital signature นี่แหละ ทุก ๆ code ที่จั๊วะ push ขึ้นไป ทุกคนมั่นใจได้เลย ว่าเป็นจั๊วะเขียนจริง ๆ

Digital envelope

“Sealed Origami Paper Envelope” by dvanzuijlekom is licensed under CC BY-SA 2.0

คือการเอา public key มาเข้ารหัส (เพราะใคร ๆ ก็มี public key ของจั๊วะ) ฉะนั้น ใครอยากส่งสาสน์ลับมาให้จั๊วะอ่านคนเดียว คนอื่นแกะอ่านไม่ได้ ก็เข้ารหัสด้วย public key ของจั๊วะนี่แหละ มีจั๊วะแกะอ่านได้คนเดียว HTTPS ก็เข้ารหัสแบบนี้แหละ

วิธี download certificate (public key) ของ server

echo quit | openssl s_client -showcerts -servername server -connect google.com:443 > goog.pem

วิธีการ test certificate ที่ download มาด้วย curl

curl -cacert goog.pem https://google.com

แก้จุดผิด: จริง ๆ HTTPS ไม่ได้เข้ารหัสแบบนี้

หลังจาก post บทความไป ผมก็ได้เรียนรู้ว่าผมเข้าใจผิด จริง ๆ HTTPS ไม่ได้ใช้ digital envelope encrypt ข้อมูล แต่ใช้ envelope encrypt symmetric key ที่จะใช้ encrypt ข้อมูลอีกที อ่านคำอธิบายเพิ่มเติมด้านล่างฮะ

Credits

ขอบคุณพี่เอ (Paween) ที่แชร์คำสั่งนี้ให้ผม

อ่านเพิ่มเติมได้ที่ https://daniel.haxx.se/blog/2018/11/07/get-the-ca-cert-for-curl/

ขอบคุณพี่ Narudom ที่ช่วยแก้ความเข้าใจผมให้ถูกต้องฮะ ^/\^

ขอบคุณคุณ Maykin ที่แนะนำให้เปลี่ยนตัวอย่างเพื่อหลีกเลี่ยงความสับสนฮะ ^/\^

--

--