Tutorial

เซ็นเอกสารอย่างปลอดภัยด้วย Yubikey และ Digital Signature

By Arnon Puitrakul - 10 เมษายน 2020 - 2 min read min(s)

เซ็นเอกสารอย่างปลอดภัยด้วย Yubikey และ Digital Signature

ในปัจจุบันไฟล์ PDF ถือว่าเป็นสกุลไฟล์ที่ใช้งานกันอย่างแพร่หลาย ตั้งแต่การเก็บเอกสารทั่ว ๆ ไป จนไปถึงเอกสารสำคัญต่าง ๆ มากมาย วันนี้เราจะพามาทำความรู้จักการเซ็นเอกสารด้วย Digital Signature กัน

ย้อนกลับไปเมื่อก่อน

เมื่อก่อน เวลาเราเดินเอกสารให้แต่ละคนเซ็น มันจะใช้เวลาหน่อย เพราะต้องใช้คนเดินเอาเอกสารไปให้คนนั้นเซ็นต์ คนนี้เซ็นต์ ไม่ต้องคิดเลยนะว่า ถ้าต้องเซ็นต์กันสัก 10 คน กว่ามันจะเดินทางไปหาคนที่ 1 แล้วไปเรื่อย ๆ จนถึงคนที่ 10 นี่นานมาก

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

ถามว่า แล้วทำไม่ใช้ iPad เซ็นลงไปเลยละ ทำไมต้องปริ้นมาก่อนด้วย นั่นเพราะเอกสารบางอย่าง ณ ตอนที่เขียนยังไม่อนุญาติให้เซ็นผ่าน Tablet น่ะสิ หรืออีก Solution นึงที่เดี๋ยวนี้โปรแกรมอ่านไฟล์ PDF หลายตัว Implement ไปแล้วคือ การที่เราสามารถ Import รูปของลายเซ็นเราได้ พอได้เอกสารมา เราก็ลากลงมาแปะ เซฟ แล้วต่อได้เลย นั่นก็สะดวกดีเหมือนกัน

ปัญหาต่อไปคือ พอลายเซ็นมันเป็น Digital การปลอมแปลงนั้นทำได้ง่ายมาก ๆ เพียงแค่เราเซฟเป็นรูปแล้วตัดมาแปะลงไปที่ใหม่เอาจริงมันก็เนียนแล้ว กระดาษเอกสารส่วนใหญ่เราก็ใช้สีขาวอยู่สีเดียวด้วย ดังนั้น แทบจะลากแปะได้เลยแหละ

หรือบางที เราเซ็นไปแล้วนะ แต่ก็มีคนอยากกวนประสาท ด้วยการเอาที่เซ็นไปแล้วอะ ไปแก้เป็นอีกอย่างก็มีเหมือนกัน จากปัญหาเหล่านี้แหละ ทำให้พวก Digital Signature เข้ามา

Digital Signature คืออะไร ?

Digital Signature หรือเรียกง่าย ๆ ว่าลายเซ็นแบบดิจิทัล เราไม่รู้ว่าภาษาไทยจริง ๆ เลยเรียกอะไร มันทำงานเหมือนลายเซ็นที่เราเซ็นลงไปในเอกสารนั่นแหละ ซึ่งมันเพิ่มความปลอดภัย และน่าเชื่อถือมากขึ้น

ย้อนกลับไปตอนที่เราเซ็นลายเซ็นลงในกระดาษ เราทำเพื่ออะไร อาจจะเป็นการ รับทราบเรื่องบางเรื่อง และ การยืนยันตัวตน ใช่แล้ว Digital Signature ทำหน้าที่เหมือนกันเลย โดยมันออกแบบมาเพื่อจัดการกับ 4 ปัญหาด้วยกันคือ

  1. Authentication หรือ การยืนยันตัวตน ที่เราสามารถบอกได้ว่า ใครเป็นคนเซ็นเอกสาาร เหมือนที่เราดูจากลายเซ็นนั่นเอง
  2. Data Integrity หรือง่าย ๆ คือ ข้อมูลที่เราเห็นตอนที่เราเซ็น กับ หลังจากนั้นมันอันเดียวกันป่าว
  3. Non-repudiation หรือ ตอแหลว่า ไม่รับลู้ ไม่ได้
  4. Confidentiality หรือ ความลับมีในโลก เราต้องทำให้เรื่องลับ ลับต่อไป ไม่แอ๊บเอ๋ ออกมาโดยที่ไม่ได้รับอนุญาติ

ถ้าคิดดูดี ๆ มันก็เลียนแบบลายเซ็นในกระดาษมาทั้งดุ้นแหละ แต่ความดีงามของมันคือ มันเป็นคณิตศาสตร์ แปลว่า เราสามารถบอกได้เลยว่า ปลอม หรือไม่ปลอม ไม่ต้องมานั่งปวดหัว ด่ากันไปมา และ บอกเลยว่า มันปลอมยากอยู่นะ

ประโยชน์ของ Digital Signature

ประโยชน์ของมันนี่ถ้าไม่คิดเยอะเลยนะ คือ ลดเวลา และ ทรัพยากร เพราะเราไม่ต้องปริ้นออกมาแล้วเซ็น แล้วสแกนกลับไปใหม่ เสียเวลามาก ๆ และด้วยความที่มันจบในเครื่องเลยแปลว่า ไม่มีการใช้งานกระดาษ ลดต้นทุนการปริ้น และ ลดการตัดไม้มาทำกระดาษด้วย

แถมยังถูกนำมาใช้ในกาารยืนยัน Integreity ของเอกสารได้ด้วยว่า มันจะไม่ได้รับการเปลี่ยนแปลง เซ็นแล้ว Finalise แล้วก็คือ จบ แก้ไม่ได้แล้ว อยากแก้ก็เซ็นเพิ่มด้วยว่าแก้อะไร

หรือแม้กระทั่ง มีประโยชน์เวลาเรา Audit ได้ดีเลยแหละ เพราะมันบอกได้เลยว่า ใครเป็นคนเซน เมื่อไหร่ วันไหน มันบอกได้หมดเลย แล้วเราก็เอามาเช็คเทียบกับกุญแจที่เจ้าของถือ เราก็จะรู้ทันทีว่าลายเซนนี้ปลอมหรือแท้

Trust (ความเชื่อ)

ก่อนจะไปถึงหัวข้อถัดไป เราขออธิบายเรื่องความเชื่อก่อน ความเชื่อ ไม่ใช่ความเชื่อทางศาสนาหรืออะไรนั่น แต่เป็น ความเชื่อใจกัน

เรื่องของความเชื่อ ใหญ่ ๆ แล้วมันจะแบ่งออกเป็น 2 แบบใหญ่ ๆ คือ Direct Trust และ Indirect Trust เอาทีละอย่างละกัน

Direct Trust เหมือน เรากับเพื่อน เชื่อใจกัน เพื่อนชี้นกเป็นนกชี้ไม้เป็นไม้ ก็คือ เชื่อกัน ส่งอะไรไปให้กัน ก็โอเคแหละแก ของที่มาจากแกชั้นเชื่อ ๆๆๆ แกไม่สตอหรอกก

Indirect Trust จะเป็นกรณีที่ คน 2 คน หรือ กลุ่มคนไม่ไว้ใจกัน แต่คนเหล่านั้นเชื่อใจคนอยู๋คนนึง คนนี้คือเป็นคนที่น่าเชื่อถือมากทุกคนเชื่อคนนี้หมด เราเรียกคนกลางนี้ว่า Trust Third Party (TTP)

แล้วเราจะเอาลายเซ็นเรามาจากไหน

Digital Signature มันไม่เหมือนลายเซ็นในกระดาษที่นึกอยากเซ็นต์อะไรก็เซ็น ๆ มันไปเถอะได้ การจะสร้าง Digital Signature มันต้องอาศัยสิ่งที่เราอธิบายกันไปก่อนหน้านี้คือ ความเชื่อ ทำให้การออก Digital Signature สามารถทำได้ 2 แบบด้วยกันคือ Self-Sign และ TTP Sign

Self-Sign คือตามชื่อเลย เราเซ็นเองใช้เอง มันจะเหมาะกับการใช้งานในวงของคนที่เชื่อใจกันอยู่แล้ว พูดง่าย ๆ คือ Direct Trust กันทั้งวงนั่นเอง แต่ปัญหามันจะเริ่มเกิด เมื่อเราคนที่เราทำงานด้วยคนใหม่ กลับเชื่อใจคน ๆ หนึ่งเท่านั้น

นั่นแปลว่า ถ้าคนที่คนใหม่ไม่เชื่อถือ อยากจะส่งข้อมูลไปให้คนใหม่ ถ้าใช้ Self-Sign ก็แปลว่า แหม่ ปลอมป่ะเนี่ยเรา แน่นอน ดังนั้น เราก็เลยยังมีความจำเป็นที่ต้องใช้ลายเซ็นที่มาจาก TTP อยู่ดีนั่นเอง

ไส้ในของ Digital Signature นั้นไม่ใช่ไฟล์ภาพเลย แต่มันเป็นเรื่องของการเข้ารหัสล้วน ๆ อยากอ่านเพิ่มลองเริ่มจากเรื่องของ Asymmatric Encrypytion เราเคยเขียนไว้แล้วในบทความของ HTTPS ลองไปอ่านดูได้ อันนั้นจะเล่าละเอียดนิดนึง

การเข้ารหัสเหล่านี้ ถ้าเราจะหิ้วลายเซ็นเรามั่ว ๆ ซั่ว ๆ ถ้ามันหลุดไป คนที่ได้ไป ก็สามารถเซ็น เพื่อปลอมเป็นเราได้ หรือ บางทีเราต้องทำงานกับคอมพิวเตอร์หลายเครื่อง ถ้าจะหิ้วไปหิ้วมา มันก็ไม่ใช่เรื่องเท่าไหร่ ทำให้พวก Hardware Security Module (HSM) ได้รับความนิยมขึ้นเรื่อย ๆ อย่างตัวที่เราจะเอามาเล่าคือ Yubikey ซึ่งแน่นอนว่าเราก็เคยรีวิวไปแล้วเหมือนกัน ลองไปอ่านได้ ถัดไปเรามาลอง Sign เอกสารด้วย Yubikey กัน

ติดตั้งโปรแกรม

ในที่นี้เราจะขอเล่าในการติดตั้งบน macOS เป็นหลักนะ ถ้าใครใช้ Windows ก็บั้ยบาย เพราะเราไม่ได้ใช้ และวันนี้เราจะใช้ลายเซ็นจาก HSM อย่าง Yubikey กัน ซึ่งมันจะต้องมีการติดตั้งโปรแกรมที่แอบยากไปหน่อย แต่ก็ได้แหละ

  1. Adobe Acrobat หรือตัว Reader ที่เป็นตัวฟรีก็ได้ สำหรับการอ่านและ Sign
  2. Yubikey Manager สำหรับการตั้งค่า PIN และ การเปิดใช้งาน Protocol ต่าง ๆ
  3. Homebrew สำหรับการติดตั้งโปรแกรมที่จำเป็น
  4. OpenSC เป็น Library สำหรับ Smart Card

เริ่มจากติดตั้ง Homebrew กันก่อน วิธีการติดตั้งเข้าไปที่หน้าเว็บของมัน แล้วรัน Command ใน Terminal ตามคู่มือเขาได้เลย จากนั้นเราจะติดตั้ง OpenSC ผ่าน Homebrew Cask กันโดยรันคำสั่งนี้

brew cask install opensc

เท่านี้ OpenSC เราก็ติดตั้งเรียบร้อย ที่เหลือ เราก็เข้าไปโหลดและติดตั้ง Acrobat และ Yubikey Manager แล้วติดตั้งตามปกติได้เลยพวกนี้ไม่น่ามีปัญหา

จากนั้น เราจะมาเริ่มเตรียมกุญแจของเรากัน โดยที่ Protocol ที่เราจะต้องเปิดให้ Yubikey ทำงานคือ PIV (Personal Identity Verification) เป็นมาตรฐานในการที่ทำให้เราสามารถ Sign หรือถอดรหัส โดยใช้ Private Key จาก Smart Card ได้

เซ็นเอกสารอย่างปลอดภัยด้วย Yubikey และ Digital Signature

โดยที่เราเสียบ Yubikey แล้วเปิด Yubikey Manager ขึ้นมา แล้วไปที่ Tab Interface ให้ติ๊กถูกที่ PIV ตรงฝั่งของ USB สำหรับคนที่เป็นรุ่น NFC ยังไม่ต้องติ๊กก็ได้ ซึ่ง Default มันจะเปิดไว้อยู่ละ สำหรับใครที่เข้าไปปิด แล้วอาจจะลืมก็เข้ามาเช็คตรงนี้ด้วย

เซ็นเอกสารอย่างปลอดภัยด้วย Yubikey และ Digital Signature

จากนั้นเราจะเข้าไปกำหนด PIN และ การเข้ารหัสต่าง ๆ กัน ให้เราเข้าไปที่ Application แล้วเลือก PIV แล้วไปที่ PIN Management เลือก PIN จากนั้นมันจะให้เรากำหนด PIN โดยที่ถ้าเราไม่เคยเปลี่ยนเลย ตรง Current PIN ให้เราติ๊ก Use Default ไป ตั้งแล้วกด Change PIN ได้เลย โดยที่ PIN นี้จะถูกเรียกให้เรากรอกเมื่อเราต้องการที่จะใช้ หรือสร้าง ลายเซ็นเรา แล้วก็ย้อนกลับไปที่ทำ PUK เช่นกัน

PUK หรือ PIN Unlock Key เป็นเหมือนรหัสสำรองไว้เผื่อเราลืม PIN เราจะใช้มัน Reset ได้

เซ็นเอกสารอย่างปลอดภัยด้วย Yubikey และ Digital Signature

และสุดท้ายของการตั้งค่าใน Yubikey คือ การสร้าง Certificate ให้เราเข้าไปที่ Configure Certificate แล้วเลือก Digital Signature แล้วก็ Generate

เซ็นเอกสารอย่างปลอดภัยด้วย Yubikey และ Digital Signature

มันจะถามเราว่า เราจะ Self-Signed หรือจะใช้ Sign จาก TTP อันนี้ขึ้นกับเราว่าเราต้องการจะใช้แบบไหน ในทีนี้เราจะใช้ Self-Signed ไป

เซ็นเอกสารอย่างปลอดภัยด้วย Yubikey และ Digital Signature

ถัดไปเป็นการเลือก Algorithm สำหรับการเข้ารหัสละ เราแนะนำให้เลือกเป็น RSA2048 เพราะ ECCP256 มันจะใช้ไม่ได้กับบางโปรแกรม อย่าง Acrobat ที่เราจะ Sign ให้ดูในวันนี้ดังนั้นเลือกเป็น RSA2048 ไปเนอะ จากนั้นก็กรอกไปตามปกติเลยมันจะถามชื่อเราและวันหมดอายุ ว่าเราจะให้ลายเซ็นนี้หมดอายุเมื่อไหร่

ถ้าหมดอายุ แปลว่าที่เอกสารที่เราเซ็นด้วยเอกสารนี้ก็จะหมดอายุด้วยเช่นกัน มันจะขึ้นเลยว่า หมดอายุ เราก็ต้องสร้างลายเซ็นอันใหม่มาเซ็นมัน ขี้นกับว่าเอกสารที่เราจะเซ็นเราจะให้มันอยู่ได้นานแค่ไหน กด Next และก็กด Generate เพื่อเป็นการสร้าง Digital Signature ของเราได้เลย

เซ็นเอกสารอย่างปลอดภัยด้วย Yubikey และ Digital Signature

จากนั้นให้เราไปที่ Acrobat หรือตัวฟรีของมันอย่าง Reader ก็ได้เช่นกัน แล้วไปที่ Perference ที่ Categories ด้านซ้ายให้เรามองหา Signatures แล้ว กด More ตรง Identities & Trusted Certificates

เซ็นเอกสารอย่างปลอดภัยด้วย Yubikey และ Digital Signature

หน้าต่างใหม่มันจะขึ้นมา ด้านซ้ายให้เราไปที่ PKCS#11 Modules and Tokens แล้วกด Attach Module แล้วใส่ตามนี้

/Library/OpenSC/lib/opensc-pkcs11.so

เมื่อเราใส่แล้วกด Attach แล้ว มันจะเป็นการโหลด OpenSC เข้ามาใน Acrobat ด้านซ้ายมันจะงอกเมนูย่อยขึ้นมาว่า OpenSC smartcard framework ถ้าเราเสียบอยู่ เข้าไปในนั้นเราจะเจอกับ Key ของเราให้กดที่ Key ของเราแล้วกด Login ด้านบน มันจะให้เราใส่ PIN ก็ใส่ไป

เซ็นเอกสารอย่างปลอดภัยด้วย Yubikey และ Digital Signature

ถ้าใส่ถูกสถานะมันควรจะเปลี่ยนเป็นคำว่า Logged in แล้วไปที่เมนูย่อยอีกอันนึง เราก็จะเจอกับ Certificate หรือก็คือลายเซ็นที่เราสร้างไว้นั่นเอง ในรูปจะมี 4 อัน เพราะเราทำ 4 ลายเซ็นนั่นเอง ถ้ามีลายเซ็นขึ้นมาก็คือ ใช้ได้ละ

การ Certify เอกสาร

เซ็นเอกสารอย่างปลอดภัยด้วย Yubikey และ Digital Signature

การจะเซ็นเอกสารก็ง่ายมาก เริ่มจากเสียบ Yubikey เข้าไปก่อน การจะเซ็นต์ หรือ การ Validate ลายเซ็นทุกครั้ง เราจะต้องเสียบ Yubikey เสมอ แล้วเปิดไฟล์ที่ต้องการจะเซ็นขึ้นมาใน Acrobat แล้วไปที่เครื่องมือชื่อ Certificates

ที่ด้านบนจะมีปุ่มขึ้นมาให้เราเลือกว่า จะเซ็นแบบไหน คือแบบฝังลายเซ็นลงไปในกระดาษเลยมั้ย หรือแค่เก็บไว้ใน Metadata อย่างเดียว เลือกอันไหนก็ได้เหมือนกัน ขึ้นกับการใช้งานของเรา เมื่อกดมาแล้ว มันจะมีหน้าต่างมาให้เราเลือก ลายเซ็นของเรา สำหรับคนที่ทำตามเรามา มันควรจะมีอันเดียวนะ ก็เลือกอันนั้นแหละ แล้วกด Continues ได้เลย

มันจะมีตัวเลือกให้เราเลือกอีกว่า หลังจากเราเซ็นไปแล้ว เราจะให้แก้ได้แค่ไหน เช่น ไม่ให้เลย หรือเซ็นเพิ่มได้ อันนี้ขึ้นกับเราใช้งานเลยว่า เราต้องการเอาไปทำอะไร เช่นถ้าจะเวียนกันให้เซ็นต์ ก็ต้องให้เพิ่มลายเซ็นได้เป็นต้น ด้านล่างมันก็จะถามหา PIN ก็ใส่ลงไป แล้วกด Sign เป็นอันเสร็จ

เมื่อเราเปิดเอกสารที่ผ่านการ Sign แล้ว เราจะเห็นเลยว่า มันมีใคร Sign บ้าง ทีนี้ ปัญหาของ Self-Signed คือ ถ้าเราถอด Yubikey ออก มันจะขึ้นว่าไม่สามารถ Validate ลายเซ็นของเราได้ ซึ่งอันนี้เป็นปกตินะ เพราะมันจะต้องเทียบกับ Yubikey ของเจ้าของลายเซ็น

แต่ถ้าเราใช้บริการ TTP พวกนี้มันจะ Validate ออนไลน์ได้เลย โดยที่เราไม่ต้องเสียบ อันนี้ก็อีกแหละ ขึ้นกับการใช้งานของเราอีกว่า เราต้องการใช้งานแบบไหนกัน

สรุป

การใช้ Yubikey เข้ามาช่วยในการยืนยันตัวตนของการเซ็นเอกสารช่วยเราได้มากในการจัดการเอกสารที่วิ่งเข้าออกเยอะมาก เชื่อว่าอนาคตอันใกล้นี้แหละ เราว่าพวกเอกสารดิจิทัลพวกนี้น่าจะถูกเอามาใช้งานกันอย่างแพร่หลายกว่านี้ วิธีที่เราเอามาสอนในวันนี้เป็นเพียงวิธีหนึ่งเท่านั้น ถ้าไม่มีพวก Yubikey เราก็สามารถทำได้เหมือนกันด้วยการหิ้ว Key File ไปมา การมีพวก Yubikey มันช่วยทำให้ Key ที่เราหิ้วไปมานั้นปลอดภัยมากขึ้นด้วยการป้องกันจาก PIN นั่นเอง ลองเอาไปเล่นกันดูได้ จริง ๆ Yubikey มันทำได้หลายอย่างมาก ๆ นะ