เซ็นต์เอกสารอย่างปลอดภัยด้วย 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 ปัญหาด้วยกันคือ
- Authentication หรือ การยืนยันตัวตน ที่เราสามารถบอกได้ว่า ใครเป็นคนเซ็นต์เอกสาาร เหมือนที่เราดูจากลายเซ็นต์นั่นเอง
- Data Integrity หรือง่าย ๆ คือ ข้อมูลที่เราเห็นตอนที่เราเซ็นต์ กับ หลังจากนั้นมันอันเดียวกันป่าว
- Non-repudiation หรือ ตอแหลว่า ไม่รับลู้ ไม่ได้
- 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 กัน ซึ่งมันจะต้องมีการติดตั้งโปรแกรมที่แอบยากไปหน่อย แต่ก็ได้แหละ
- Adobe Acrobat หรือตัว Reader ที่เป็นตัวฟรีก็ได้ สำหรับการอ่านและ Sign
- Yubikey Manager สำหรับการตั้งค่า PIN และ การเปิดใช้งาน Protocol ต่าง ๆ
- Homebrew สำหรับการติดตั้งโปรแกรมที่จำเป็น
- 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 แล้วเปิด Yubikey Manager ขึ้นมา แล้วไปที่ Tab Interface ให้ติ๊กถูกที่ PIV ตรงฝั่งของ USB สำหรับคนที่เป็นรุ่น NFC ยังไม่ต้องติ๊กก็ได้ ซึ่ง Default มันจะเปิดไว้อยู่ละ สำหรับใครที่เข้าไปปิด แล้วอาจจะลืมก็เข้ามาเช็คตรงนี้ด้วย
จากนั้นเราจะเข้าไปกำหนด PIN และ การเข้ารหัสต่าง ๆ กัน ให้เราเข้าไปที่ Application แล้วเลือก PIV แล้วไปที่ PIN Management เลือก PIN จากนั้นมันจะให้เรากำหนด PIN โดยที่ถ้าเราไม่เคยเปลี่ยนเลย ตรง Current PIN ให้เราติ๊ก Use Default ไป ตั้งแล้วกด Change PIN ได้เลย โดยที่ PIN นี้จะถูกเรียกให้เรากรอกเมื่อเราต้องการที่จะใช้ หรือสร้าง ลายเซ็นต์เรา แล้วก็ย้อนกลับไปที่ทำ PUK เช่นกัน
PUK หรือ PIN Unlock Key เป็นเหมือนรหัสสำรองไว้เผื่อเราลืม PIN เราจะใช้มัน Reset ได้
และสุดท้ายของการตั้งค่าใน Yubikey คือ การสร้าง Certificate ให้เราเข้าไปที่ Configure Certificate แล้วเลือก Digital Signature แล้วก็ Generate
มันจะถามเราว่า เราจะ Self-Signed หรือจะใช้ Sign จาก TTP อันนี้ขึ้นกับเราว่าเราต้องการจะใช้แบบไหน ในทีนี้เราจะใช้ Self-Signed ไป
ถัดไปเป็นการเลือก Algorithm สำหรับการเข้ารหัสละ เราแนะนำให้เลือกเป็น RSA2048 เพราะ ECCP256 มันจะใช้ไม่ได้กับบางโปรแกรม อย่าง Acrobat ที่เราจะ Sign ให้ดูในวันนี้ดังนั้นเลือกเป็น RSA2048 ไปเนอะ จากนั้นก็กรอกไปตามปกติเลยมันจะถามชื่อเราและวันหมดอายุ ว่าเราจะให้ลายเซ็นต์นี้หมดอายุเมื่อไหร่
ถ้าหมดอายุ แปลว่าที่เอกสารที่เราเซ็นต์ด้วยเอกสารนี้ก็จะหมดอายุด้วยเช่นกัน มันจะขึ้นเลยว่า หมดอายุ เราก็ต้องสร้างลายเซ็นต์อันใหม่มาเซ็นต์มัน ขี้นกับว่าเอกสารที่เราจะเซ็นเราจะให้มันอยู่ได้นานแค่ไหน กด Next และก็กด Generate เพื่อเป็นการสร้าง Digital Signature ของเราได้เลย
จากนั้นให้เราไปที่ Acrobat หรือตัวฟรีของมันอย่าง Reader ก็ได้เช่นกัน แล้วไปที่ Perference ที่ Categories ด้านซ้ายให้เรามองหา Signatures แล้ว กด More ตรง Identities & Trusted Certificates
หน้าต่างใหม่มันจะขึ้นมา ด้านซ้ายให้เราไปที่ PKCS#11 Modules and Tokens แล้วกด Attach Module แล้วใส่ตามนี้
/Library/OpenSC/lib/opensc-pkcs11.so
เมื่อเราใส่แล้วกด Attach แล้ว มันจะเป็นการโหลด OpenSC เข้ามาใน Acrobat ด้านซ้ายมันจะงอกเมนูย่อยขึ้นมาว่า OpenSC smartcard framework ถ้าเราเสียบอยู่ เข้าไปในนั้นเราจะเจอกับ Key ของเราให้กดที่ Key ของเราแล้วกด Login ด้านบน มันจะให้เราใส่ PIN ก็ใส่ไป
ถ้าใส่ถูกสถานะมันควรจะเปลี่ยนเป็นคำว่า Logged in แล้วไปที่เมนูย่อยอีกอันนึง เราก็จะเจอกับ Certificate หรือก็คือลายเซ็นต์ที่เราสร้างไว้นั่นเอง ในรูปจะมี 4 อัน เพราะเราทำ 4 ลายเซ็นต์นั่นเอง ถ้ามีลายเซ็นต์ขึ้นมาก็คือ ใช้ได้ละ
การ Certify เอกสาร
การจะเซ็นต์เอกสารก็ง่ายมาก เริ่มจากเสียบ 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 มันทำได้หลายอย่างมาก ๆ นะ