22 พฤศจิกายน 2564

Quantum Computing and Cryptography Breaking


สัปดาห์ที่ผ่านมาเรื่องการเอา Quantum Computing มาทำลาย Cryptographic Algorithm กลับมาเป็นประเด็นอีกครั้งหนึ่ง ฟังดูน่ากลัวนะครับ แต่ว่าน่ากลัวขนาดนั้นจริงหรือ

เอาประเด็นแรกก่อน Quantum Computing สามารถทำลาย Cryptographic Algorithm ในปัจจุบันได้ในระยะเวลาที่น้อยกว่าการใช้ CPU+GPU ที่เป็นเทคโนโลยีปัจจุบันได้จริงหรือไม่ คำตอบคือ จริงครับ เรื่องนี้ไม่ได้เป็นที่ต้องถกเถียงกัน ของใหม่ย่อมเร็วกว่าของเก่า ไม่งั้นมันจะพัฒนามาทำไม

คำถามที่ควรจะต้องถามต่อไปคือ แล้วเมื่อไรถึงจะมีการใช้ Quantum Computing มาทำลาย Cryptographic Algorithm ที่ใช้กันอยู่ในปัจจุบัน คำตอบคือไม่รู้ แต่พอจะทำนายถึงการนำมาใช้ได้ โดยมีปัจจัยให้พิจารณาดังนี้

ปัจจัยแรกคือการเปลี่ยนจากการใช้งาน Quantum Computing ที่เกี่ยวข้องกับงานที่มีมูลค่าสูง เช่นการวิจัยทางการแพทย์ การทหาร มาเป็นงานเชิงพาณิชย์ เรื่องนี้เป็นเรื่องพื้นฐานทางเศรษฐศาสตร์เกี่ยวกับ demands & supplies เมื่อค่าใช้จ่ายของการประมวลผลสูงและ supplies น้อย มันก็จะถูกใช้กับงานที่คุ้มค่าที่จะทำก่อน การทำลาย Cryptographic Algorithm ไม่ได้มีความคุ้มค่าในลำดับต้นๆ ที่จะใช้ Quantum Computing แต่อาจจะอยู่ในรายการลำดับกลางๆ เว้นเสียแต่ว่าเป็นงานทางการทหาร

ปัจจัยที่สองคือการก้าวผ่านการใช้งาน Quantum Computing จาก Time Sharing มาเป็นซื้อมาใช้ได้เองในระดับองค์กร ไปจนถึงซื้อใช้ได้เองในระดับบุคคล เราถึงจะค่อยๆ เห็นแนวโน้มการอยากที่จะทำลาย Cryptographic Algorithm มากขึ้นตามลำดับจนถึงขั้นที่สมควรต้องเป็นกังวลได้

ปัจจัยที่สามคือเมื่อค่าใช้จ่ายในการใช้งาน Quantum Computing อยู่ในระดับใกล้เคียงกับค่าใช้จ่ายในการขโมย Secret หรือ Cryptographic Key ของ Algorithm ปัจจุบัน ซึ่งถ้ามันถูกขนาดนั้นคงไม่มีใครไปขโมย Secret Key ให้เมื่อยตุ้ม

จากการประเมินของผมน่าจะใช้เวลาเป็นสิบปีที่ Quantum Computing จะถูกนำมาใช้ทำลาย Cryptographic Algorithm ในทางการทหาร อาจถึง 20 ปีในระดับที่แฮกเกอร์จะนำมาใช้อย่างแพร่หลาย

คำถามต่อไปคือแล้วจะมีใครนำมาใช้เพื่อทำลาย Cryptocurrency ไหมในอนาคตเมื่อถึงเวลาที่ราคาการใช้ Quantum Computing ลงมาถูกมากพอ เพราะคนที่ถือคงจะหวั่นใจอยู่ว่าราคาจะตก คำตอบคือ ต้องพิจารณาว่าข้อกังวลอยู่ที่ไหน คือถ้าเปลี่ยนแปลง Transaction ที่ทำไปแล้ว ประเด็นนี้ไม่ต้องกังวลเท่าไร เพราะ Cryptocurrency กระแสหลักต่างเป็น Distributed Ledger ถ้าอยากจะแก้ต้องไปตามแก้แต่ละสำเนาจนกระทั่งมากพอที่จะยึดทั้ง Chain ได้ (ที่เหลือก็จะกลายเป็น Forked Chain โดยปริยาย) ซึ่งเป็นไปได้ยากมากในทางปฏิบัติ

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

เขียนมาทั้งหมดนี้ ไม่รู้ว่าจะช่วยอะไรใครได้หรือเปล่า

ก็ผมไม่ใช่ Guru นี่นา

17 ตุลาคม 2564

Pulse Secure บน Windows กับการให้ Script ทำงานหลังจากเชื่อมต่อสำเร็จ

บันทึกไว้เพื่อทำซ้ำในครั้งต่อไป และแบ่งปันเผื่อเป็นประโยชน์กับสาธารณะ

ผมถนัดนั่งทำงานกับเครื่องที่เป็น Linux มากกว่า Windows และโดยส่วนตัวไม่ค่อยชอบ Windows เท่าไรแม้จะออก WSL มาก็ตาม อย่างไรก็ตามผมก็เลี่ยง Windows ไม่ได้เพราะเครื่องที่ทำงานให้มาใช้ก็เป็น Windows 10

แม้ว่าจะให้เครื่องมาใช้ แต่ที่ทำงานก็อนุญาตให้ใช้เรื่อง Windows ที่ติดตั้ง Security Software ต่างๆ ผ่านมาตรฐานให้ใช้งานผ่าน Pulse Secure VPN ได้ โดยผมขอใช้ Hard Token ซึ่งจะสร้าง One Time Password มาให้เพื่อทำการเชื่อมต่อ ผมจึงได้สร้าง VM บน VirtualBox เพื่อลง Windows 10 ทำการติดตั้ง Security Software ตามมาตรฐานและลง Pulse Secure เพื่อเชื่อมต่อ VPN

แต่ผมไม่อยากทำงานบน Windows VM เพราะถ้าต้องประชุมเปิดกล้องบน Microsoft Teams จะต้องโอน USB Camera ไปให้ ในขณะที่ ผมมีประชุมกับภายนอก อย่าง Zoom, Google Meet หรือ WebEx ซึ่งไม่จำเป็นที่จะต้องทำผ่าน VPN ผมก็เลยใช้วิธีตั้ง Proxy แล้วทำ Port Forwarding จาก Linux Host ไปยัง Windows VM ตรงนี้ไปดูคู่มือ VirtualBox เอา ผมจะไม่อธิบาย

ปัญหาก็คือ Proxy ใน Windows VM จะต้อง Start หลังจากที่ VPN ทำการเชื่อมต่อสำเร็จเท่านั้น ตอนแรกพยายามทำด้วย Batch โดยสั่งให้ pulselaucher.exe ซึ่งเป็น command line ทำงานก่อน ตามด้วยเรียก Proxy ให้ทำงาน แต่ปรากฎว่า pulselaucher.exe เกิด Exit with Error ตลอดเพราะไม่รองรับการตรวจสอบ Policies ที่บริษัทตั้งไว้เหมือกับที่ทำผ่าน Pulse Secure UI

ก็เลยคิดว่ามีทางไหมที่จะใช้ Pulse Secure UI นั่นแหละแล้วเมื่อเชื่อมต่อได้แล้วถึงสั่งให้ Proxy ทำงาน ก็เลยไปดู Windows Event Log ว่ามี Event ไหนที่บอกได้ว่าได้เชื่อมต่อ VPN สมบูรณ์แล้วก็พบว่ามี IVE Event 312, 306 และ 305 ตามลำดับดังรูป

พอได้ Event มาก็ไปทำ Task Scheduler ให้ Trigger ในเงื่อนไขตามรูป

ส่วน Action ก็สั่ง "Start a program" แล้วก็ใส่ command และ arguments เพื่อให้ Proxy ทำงาน

ต่อไปทุกครั้งที่เชื่อมต่อสำเร็จ Proxy ก็จะทำงานอัตโนมัติ

หวังว่าจะเป็นประโยชน์ต่อผู้ที่ต้องการ Run Script หลังจาก Pulse Secure เชื่อมต่อสำเร็จ (ซึ่งไม่รู้ว่าจะมีหรือเปล่า) นะครับ

Low Code != Low Effort


หลังจากที่เห็น Clip พูดถึง Low Code ว่าช่วยทำให้เขียนโปรแกรมได้ง่ายขึ้น เร็วขึ้น ก็รู้สึกว่าทำไมมันช่างต่างจากที่ผมเคยสัมผัสและได้ยินจากปากคนที่เคยใช้มาเสียเหลือเกิน ผมก็เลยอยากจะเล่าให้ฟังแบบ "อาศัยความรู้สึก" เป็นหลัก ไม่ได้ให้ใครจะมาคล้อยตาม เพียงแต่กระตุกให้คิดสักนิดนึง

ในโลกของ Low Code มีวิธีตั้งต้นการพัฒนา App อยู่หลายวิธี แต่ส่วนใหญ่จะเริ่มด้วยสองวิธีนี้คือ เริ่มต้นด้วย User Interface ซึ่งตัวที่เริ่มต้นด้วยวิธีนี้ ได้แก่ Microsoft Power App เข้าใจว่าอีกหลายตัวก็เริ่มแบบนี้เหมือนกัน แต่เนื่องจากไม่ได้ผ่านมาในงานที่เคยทำจึงไม่ขอพูดถึง การพัฒนาในเริ่มต้นด้วย UI เป็นเรื่องที่ Front-End Developer ส่วนใหญ่เข้าใจได้ง่าย

อีกวิธีคือเริ่มต้นด้วย Data Model ซึ่งวิธีนี้เป็นวิธีที่ดีถ้ามีการออกแบบโครงการอย่างครบถ้วนก่อนลงมือ Implement ตัวอย่างผลิตภัณฑ์ที่ไปในแนวทางนี้ได้แก่ Mendix ซึ่ง Front-End Developer มักจะมีปัญหากับการพัฒนาในแนวทางนี้ แต่คนที่ทำงานกับข้อมูลมากๆ จะชอบ

คำถามก็คือความคาดหวังของคนส่วนใหญ่ที่อยากใช้ Low Code คืออะไร พัฒนาโปรแกรมได้เร็ว เขียนโปรแกรมน้อยลง ซึ่งความเห็นของผมคือ ขึ้นอยู่กับว่าคุณจะทำอะไร ซึ่งผมมีความเห็นตามนี้

Low Code Platform เหมาะกับ Application ประเภทไหน

ประเภทแรกคือ Stand Alone App ที่มีเพียง App กับ Database หรือ Data Object ไม่ได้มีการ Integrate กับภายนอก ทั้งหมดจบอยู่ใน App ซึ่ง Low Code Platform จะเหมาะกับ App แบบนี้มากที่สุด

ประเภทที่สองคือ App ที่มี Integration กับภายนอกผ่านตัว Low Code Platform เองที่เรียกว่า Connector ไม่ว่าจะเป็นของเจ้าของ Platform หรือ Third-Party Connectors ก็แล้วแต่ ซึ่งการเลือกใช้ Low Code กับงานประเภทนี้ ต้องคำนึงเสมอว่าในอนาคตนั้น App ของเราไม่ควรจะมีการ Integrate กับบริการที่ไม่มี Connector รองรับ

Low Code Platform ไม่เหมาะกับ Application ประเภทไหน

ผมเจองานสองแบบที่ไม่เหมาะกับ Low Code Platform เลย งานเหล่านี้ประเภทแรกได้แก่ งานที่อยากใช้ความสามารถของ Hardware เช่นอยากให้กล้องมือถือสแกน Bar-code ไม่ว่าจะเป็นมิติเดียวหรือสองมิติอย่าง QR Code ก็ตาม แบบนี้ต้องอาศัยการพลิกแพลงที่เยอะมากเพราะ Platform ส่วนใหญ่ไม่รองรับ

ประเภทที่สองคือมีการ Integration กับหลายระบบ แม้ว่าหลาย Platform จะรองรับ Integration กับ In-House Service ก็ตาม พอทำงานจริงๆ เจอท่าแปลกๆ อย่าง Asynchronous Callback หลาย Platform ก็ไปลำบาก เหมือนกัน (แต่ก็อีกงาน Development ทั่วไปคงเป็นแต่ Synchronous)

แล้วทำไม Low Code != Low Effort

ถ้าคุณทำงานในองค์กรขนาดเล็กที่ไม่ได้มี Integration เยอะแยะไปหมด ไม่มีความต้องการแปลกๆ ในการทำงาน Low Code อาจทำให้ Low Effort ในการได้สักแอปขึ้นมา แต่ถ้าคุณอยู่ในองค์กรใหญ่ Low Code Platform ทำให้ Effort ในการทำงานอาจจะไม่ได้ Low จริงเช่น

  1. ถ้าคุณต้องทำการเชื่อมต่อกับระบบอื่นๆ มากมาย แต่ไม่ได้มี Connector มากับ Platform นั้นๆ คุณคงต้องพลิกแพลงในการทำงานมาก บางกรณีอาจจะมากกว่าการเขียนแอปแบบปกติ
  2. บางทีคุณจะพบว่า Feature ที่คุณอยากได้ ไม่ได้อยู่ใน Low Code Platform ที่คุณเลือก แต่มีใน Platform อื่น คุณจะเลือกใช้อีก Platform หรือไม่ หรือทนใช้ของที่มีอยู่
  3. ตามที่ผมเข้าใจ Low Code Platform ไม่ได้ทำงานข้ามค่ายได้ ไม่เหมือนกับการเลือกใช้ Framework ต่างๆ ในการพัฒนา Software ตามปกติ

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

ต้องขอย้ำว่าบทความนี้เป็นความเห็นส่วนตัวล้วนๆ ถ้าใครมีประสบการณ์แบบอื่นลองมาเล่าสู่กันฟัง

21 มกราคม 2564

ตั้งค่า Citrix Workspace App บน Linux ให้ใช้งานกับ Citrix XenDesktop/XenApp ได้


ผมมีงานที่ต้องใช้ VPN ผ่าน Citrix XenApp Server มานานหลายปี โดยหลักๆ แล้ว Admin ของระบบได้ออกคู่มือการติดตั้ง Citrix Workspace หรือ ชื่อเดิมคือ Citrix Receiver สำหรับ Windows, iOS และ Android ออกมา แต่ไม่มี Linux นั่นทำให้ผมต้องหาทางเชื่อมต่อด้วย Linux เอง ซึ่งก็ไม่ได้ประสบปัญหาอะไรจนกระทั่ง Citrix Receiver v.13.x เกิดปัญหาเรื่อง TLS/ SSL Compatibility เป็นอย่างมาก จนผมต้องไปใช้ Citrix ใน Linux ที่วิ่งอยู่บน VirtualBox ซึ่งวันดีคืนดีพอทางฝั่ง Server Update Patch ก็ใช้ไม่ได้ขึ้นมาดื้อๆ จนถอดใจยอมใช้ผ่าน Citrix Workspace for Android ซึ่งไม่มีปัญหานี้ โดยซื้อ Tablet มาใช้ แต่ก็ทำงานลำบากเพราะจอเล็ก (8 นิ้ว)

กาลเวลาผ่านไปผมซื้อ Laptop ที่มี Spec ต่ำมาใช้งาน (AMD A6-9225 RAM 4 GB จอ 14 นิ้ว Full HD) ซึ่งจะลง Virtual Box ก็กระไรอยู่ จะลง Android x86 มาเป็น Dual Boot ก็กังวลเรื่อง Driver เลยกลับมาหาทางทำให้ Citrix Work Space for Linux ใช้งานได้บน Linux ที่ทำงานอยู่บน Hardware จริง ลองหลายทางแต่เอาที่สำเร็จ และติดตั้งไป 3 เครื่องในบ้านแล้ว โดยสรุปขั้นตอนดังนี้

Root Certificates ที่มากับ Citrix Workspace App for Linux

  1. ติดตั้ง Citrix Workspace App for Linux ล่าสุด v.1912 ผมเลือกแบบ Debian Package (deb) ซึ่งไม่ว่าจะ เป็น Debain, RPM, หรือ Tarball Package ก็จะไปอยู่ที่ /opt/Citrix/ICAClient
  2. เนื่องจากตัว App รู้จัก root certificates แค่ 8 ตัวตามรูปด้านบน ต้องหาว่ามี root certificates ที่สามารถจะมาเพิ่มได้ไหม ซึ่งต้องเป็น PEM format ผมแนะนำให้ไปเอาจาก Mozilla Folder ถ้าหากลง Firefox ไว้อยู่แล้ว ถ้าเป็นสาย Debian ก็อยู่ที่ /usr/share/ca-certificates/mozilla แม้ว่าจะ .crt แต่ก็เป็น PEM format
  3. link file จาก Folder ดังกล่าวมาไว้ที่ /opt/Citrix/ICAClient/keystore/cacerts
  4. สั่งคำสั่ง ctx_rehash เพื่อให้ App รู้จัก


ถ้าลง Firefox บนสาย Debian อยู่แล้วก็สั่งสองคำสั่งนี้


sudo ln -s /usr/share/ca-certificates/mozilla/* /opt/Citrix/ICAClient/keystore/cacerts

sudo /opt/Citrix/ICAClient/util/ctx_rehash

จากนั้นก็ลองเชื่อมต่อ Server เข้าไปใช้งาน

บันทึกไว้กันลืม