0144 | Enigma code และช่องโหว่ของมัน

บังเอิญเจอคลิปจาก channel numberphile ใน youtube มาครับ (เป็น subscriber ของ channel นี้อยู่ ดูเพลินดี) พอดีเค้าอัพคลิปเรื่องเครื่อง Enigma นี้ขึ้นมาพอดี ก็เลยเอามาแปะกันครับ

เกริ่นคร่าวๆ ก่อน เจ้าเครื่อง Enigma นี่เป็นเครื่องที่เกิดขึ้นมาในสมัยสงครามโลกครับ ด้วยความที่ต้องป้องกันการถูกดักฟัง ข้อความทั้งหมดที่ส่งกันไปส่งกันมาก็เลยต้องเข้ารหัส ทีนี้ก็มีการเข้ารหัสหลายๆ วิธีเกิดขึ้นมา ศาสตร์แห่งการเข้ารหัสก็พัฒนาอย่างมากกันในช่วงนี้แหละครับ ไอ้อะไรหลายๆ อย่างที่เราใช้เข้ารหัสกันทุกวันนี้บางส่วนก็ยังคงเป็นมรดกตกทอดจากยุคสงครามโลกอยู่เลยก็มี

เข้าเรื่อง ไอ้เครื่อง Enigma นี่มันจะไว้เข้ารหัสโดยการแทนที่ตัวอักษรแบบผันแปรครับ คือตัวอักษรเดิม ถ้าเรากดซ้ำๆ ข้อความที่ได้จะเปลี่ยนไปเรื่อยๆ เช่นข้อความต้นแบบคือ aaaaa เวลาเข้ารหัสแล้วอาจออกมาเป็น iudgh อะไรแบบนี้ (อันนี้มั่วมานะ) โดยใช้ jumper ในการเชื่อมสลับคู่ตัวอักษรทั้ง 26 ตัว และแกนหมุน 3 หลักที่ช่วยให้ตัวอักษรหมุนเวียนไปไม่ซ้ำกันเพื่อให้ถอดรหัสได้ยากถ้าไม่รู้การตั้งค่าเริ่มต้นที่ถูกต้องทั้งหมด

พูดไปอาจจะนึกไม่ออก ลองดูคลิปนี้เลยดีกว่าครับ

ทีนี้ ปัญหาของ enigma code นี่มันคือ การที่ตัวอักษรต้นฉบับตัวเดิม จะไม่ได้ถูกแทนที่ด้วยตัวอักษรปลายทางเดิมเสมอเนี่ย มันมีช่องโหว่ว่า มันจะไม่มีวันแทนที่กลับมาเป็นตัวเองโดยเด็ดขาด ถ้ารู้ข้อความต้นฉบับเพียงบางส่วน (อาจจะแค่ 7-8 ตัวอักษร) ก็จะสามารถคำนวณหาค่าตั้งต้นสำหรับชุดคำนั้นได้โดยการทาบข้อความต้นฉบับกับข้อความที่เข้ารหัสแล้ว แล้วไล่ไปเรื่อยๆ ครับ ดูคลิปเลยดีกว่า

ในคลิปมีพูดถึงบุคคลสำคัญของคนที่ทำงานสายคอมพิวเตอร์โปรแกรมมิ่งอยู่ด้วยคนนึงครับ เค้าคือ Alan Turing … ประวัติเป็นไงไปอ่านต่อใน wikipedia ละกันนะครับ (ตึ่ง!)

0143 | Flashcache บน CentOS 6

จริงๆ เคยเขียนไปเมื่อนานมาแล้วครับ ตั้งแต่ centos 6 เพิ่งออกใหม่ๆ มั้ง (ฮา) อยุ่ใน entry นี้ ครับ ซึ่ง software มันก็ update มาเยอะพอควรแล้วล่ะนะ ก็เลยขอ update ตามนิดหน่อย

สำหรับ flashcache มันคือ module ที่ทำหน้าที่ในการใช้ ssd (หรืออะไรก็ตามที่เร็วกว่า harddisk) มาช่วย cache ข้อมูลที่อ่านบ่อยๆ ไว้ เป็นเหมือน buffer อีกชั้นนึงของการอ่านข้อมูล ช่วยให้สามารถเรียกใช้ข้อมูลได้เร็วขึ้น (กรณีที่มี cache อยู่แล้วน่ะนะ) ลดการทำงานของ harddisk ลง และเพิ่มประสิทธิภาพในภาพรวมถ้าตั้งค่าได้ถูกต้อง

ข้อดีของ flashcache ที่เห็นได้ชัดมากคือ เราสามารถทำ storage ที่มีความเร็วสูงมากๆ และเร็วกว่าปกติ(พอควร) ได้ในราคาที่ถูกมากๆ เหมาะกับการใช้งานที่ต้องการ read random เยอะๆ เช่นการเข้าถึงไฟล์ขนาดเล็กๆ จำนวนมาก หรือการใช้งานฐานข้อมูลครับ

ข้อเสียมีนิดหน่อยคือ cache ratio ต้องสูงมากพอที่จะไม่ทำให้เกิด replacement บ่อย เพราะ SSD มันอ่านพร้อมกับเขียนได้ช้าครับ (ส่วนมากเวลาเรา benchmark จะมีแค่ อ่านอย่างเดียว หรือเขียนอย่างเดียว ไม่ค่อยมี อ่านพร้อมกับเขียน ให้เห็น เพราะมันทดสอบยาก) และถ้า ssd พังในบางสถานการณ์อาจทำให้ข้อมูลหายบางส่วนได้ครับ (รายละเอียดด้านล่าง)

วิธีติดตั้งสำหรับ centos ค่อนข้างง่ายครับ ก่อนอื่นมี pre-requirement คือต้องการ repository “epel” สำหรับติดตั้งคำสั่ง git เพิ่ม ลงได้ด้วยคำสั่งนี้ครับ

rpm -Uvh http://mirrors.thzhost.com/epel/6/x86_64/epel-release-6-8.noarch.rpm

จากนั้นก็สั่งติดตั้ง software ที่จำเป็นสำหรับการ compile flashcache

yum -y install kernel kernel-devel git make gcc-c++ device-mapper

แล้วก็สั่งรีบูทเครื่อง 1 ครั้งเพื่อให้ kernel ที่กำลังใช้งาน version ตรงกันกับ kernel devel ที่ติดตั้งไว้ จากนั้นก็สั่งติดตั้ง flashcache ได้เลยครับ

git clone git://github.com/facebook/flashcache.git
cd flashcache
make && make install

ถ้าไม่มี error อะไรก็สั่งทดสอบการติดตั้ง flashcache ได้ด้วยคำสั่ง modprobe flashcache เลยครับ มันไม่ควรจะมีอะไรขึ้นมาให้เห็น (ถ้ามีก็แก้ไปละกัน)
และสำหรับคำสั่งสร้าง flashcache มีดังนี้ครับ

flashcache_create -p <mode> <cachename> /dev/SSD /dev/HDD

โดย mode การทำงานมีทั้งหมด 3 แบบคือ

  • back : writeback โหมดนี้เร็วที่สุด แต่มีความเสี่ยงข้อมูลหายกรณี ssd พัง เนื่องจากเมื่อเขียนข้อมูลลงมา ข้อมูลจะถูกนำมาเขียนลง SSD ไว้ก่อน แล้วเมื่อ Harddisk ว่างงานก็ค่อยๆ ทยอยเขียนลง Harddisk จริงๆ อีกที
  • thru : writethru เป็นโหมดที่เหมาะกับข้อมูลที่ถูกอ่านทันทีหลังจากเขียน คือข้อมูลจะถูกเขียนลง harddisk พร้อมๆ กับ ssd แล้ว cache ไว้ทันที
  • around : writearound โหมดนี้อาจจะช้าที่สุดก็เป็นได้ครับ แต่ก็ปลอดภัยที่สุดเหมือนกัน เพราะมันจะ cache ข้อมูลเมื่อข้อมูลถูกอ่านเท่านั้น (ซึ่ง mode อื่นก็ทำแบบนี้อยู่แล้ว) สำหรับการเขียนข้อมูล จะเขียนลง harddisk ตรงๆ อย่างเดียว ไม่มีการเขียนลง ssd ครับ

Tags: , ,