5 คะแนน โดย GN⁺ 2023-09-17 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Horcrux เป็นเครื่องมือ CLI ที่แบ่งไฟล์ออกเป็น ชิ้นส่วน horcrux ที่เข้ารหัสไว้ และช่วยให้สามารถกู้คืนไฟล์ต้นฉบับได้โดยไม่ต้องจำรหัสผ่าน
  • เหมาะสำหรับผู้ใช้ที่ต้องเข้ารหัสไฟล์สำคัญขนาดใหญ่ แต่กังวลว่าอีกหลายปีข้างหน้าอาจจำรหัสผ่านไม่ได้ รวมถึงผู้ที่ต้องการส่งไฟล์ผ่านหลายช่องทางเพื่อลดโอกาสที่ผู้โจมตีจะดักรับได้อย่างมาก
  • split ใช้สำหรับระบุจำนวนชิ้นส่วนที่จะสร้างเมื่อแบ่งไฟล์ และจำนวนชิ้นส่วนที่ต้องใช้เพื่อกู้คืนไฟล์ต้นฉบับ โดยตัวอย่างเป็นการตั้งค่าให้กู้คืนได้ด้วยชิ้นส่วนใดก็ได้ 3 ชิ้นจากทั้งหมด 5 ชิ้น
  • bind เป็นคำสั่งสำหรับรวมไฟล์ต้นฉบับกลับคืนจากไดเรกทอรีที่มีชิ้นส่วน horcrux และสามารถส่งไดเรกทอรีเป็นอาร์กิวเมนต์ได้เช่นกัน
  • กลไกภายในใช้ Shamir Secret Sharing Scheme เพื่อแบ่งคีย์เข้ารหัสออกเป็นหลายส่วน และจะสร้างคีย์เดิมกลับขึ้นมาได้เมื่อมีจำนวนชิ้นส่วนถึง ค่าขีดขั้นต่ำ (threshold) ที่กำหนด
  • การสร้างคีย์ใช้ฟังก์ชัน Read ของ crypto/rand ในไลบรารีมาตรฐานของ Go ส่วนการทำ Shamir ใช้งานโค้ดที่ดัดแปลงมาจาก vault repo ของ Hashicorp
  • ติดตั้งได้ผ่าน Homebrew ด้วย brew install jesseduffield/horcrux/horcrux, ผ่าน scoop ด้วย scoop bucket add extras; scoop install horcrux หรือผ่าน binary release
  • ทางเลือกอย่าง ssss ถูกระบุว่าใช้งานได้กับคีย์ แต่ไม่รองรับตัวไฟล์โดยตรง ส่วน horcrux ตัวอื่นและ Haystack แตกต่างกันตรงที่ไม่รองรับ threshold ของ horcrux

1 ความคิดเห็น

 
GN⁺ 2023-09-17
ความคิดเห็นบน Hacker News
  • สิ่งที่ควรระวังคือเครื่องมือนี้ใช้ โหมด AES OFB สำหรับเข้ารหัสและถอดรหัสไฟล์ และไม่มีการรับประกันความถูกต้องครบถ้วนของ ciphertext กล่าวคือไม่มี MAC
    [0]: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation...

    • คำอธิบายในวิกิข้างบนนั้น ถึงจะมีพื้นฐานทางเทคนิคอยู่บ้างก็ยังเข้าใจยาก ช่วยอธิบายแบบ เหมือนอธิบายให้เด็ก 5 ขวบฟัง ได้ไหม?
  • มีโปรเจกต์เจ๋ง ๆ ในกลุ่มเครื่องมือสำรองข้อมูลแบบใช้กระดาษ ที่ใช้ Shamir secret sharing เพื่อให้แจกสำเนากระดาษหลายใบให้เพื่อน ๆ แล้วภายหลังอ่านด้วยวิธีเชิงแสงเพื่อกู้คืนไฟล์ได้
    https://github.com/cyphar/paperback

    • ต้องหาเวลาทำ อินเทอร์เฟซผู้ใช้ ที่ใช้งานได้จริงให้ได้ แต่เดิมทีงานกราฟิกไม่ใช่จุดแข็งของผม
      ตอนนี้ฟังก์ชันทำงานได้ครบแล้ว แต่ยังต้องคัดลอกและวางเนื้อหา QR code ผ่าน command line และยังต้องทำให้รูปแบบบนดิสก์—หรือควรพูดว่าบนกระดาษ—นิ่งด้วย
    • สงสัยว่าอันนี้ต่างกันไหม หรือว่าทำสิ่งเดียวกันเป๊ะ ๆ
      https://github.com/paritytech/banana_split
    • เรียบร้อยมาก รู้สึกว่ายังเร็วไปนิดที่จะพึ่งพา แต่ถ้ามันโตขึ้นและใช้ง่ายขึ้น น่าจะมีประโยชน์กับคนจำนวนมากทีเดียว
    • Shamir secret sharing ทำงานได้ดีกับอินพุตขนาดใหญ่ไหม? หรือควรเข้ารหัส plaintext ด้วย AEAD แล้วใช้ Shamir secret sharing แบ่งเฉพาะคีย์?
  • เมื่อไม่นานมานี้ Levchin มีบทความเกี่ยวกับ Shamir secret sharing และความสับสนที่มันก่อขึ้นที่ PayPal: https://max.levch.in/post/724289457144070144/shamir-secret-s...
    นี่เป็นหนึ่งในอัลกอริทึมที่ผมชอบที่สุด แต่พูดตามตรง ช่วงนี้ผมเริ่มสงสัยแล้วว่าผมแค่หลงใหลมันในเชิงวิชาการ หรือกรณีใช้งานจริงของมันจำกัดกว่าที่คิดกันแน่

    • Shamir secret sharing นั้นโดยพื้นฐานแล้วเหมาะอย่างยิ่งสำหรับ nerd sniping
      มันเรียบง่ายพอที่จะเข้าใจได้แม้แทบไม่มีพื้นฐานด้านคริปโตกราฟีหรือคณิตศาสตร์ขั้นสูง จริง ๆ แล้วรู้พีชคณิตนิดหน่อยก็พอแล้ว ความเป็นไปได้ของมันเองก็น่าทึ่ง และอย่างน้อยในตอนแรก กรณีใช้งานที่เป็นรูปธรรมก็ดูชัดเจน แถมยังลองลงมือ implement เองได้ด้วย แน่นอนว่ายังมีหลุมพรางอยู่
      เพราะแบบนั้นผมเลยคิดว่ามันปรากฏบ่อยเกินไป ทั้งในกระดานสนทนาและในโซลูชันระดับอุตสาหกรรม
    • ผมไม่เห็นว่าบทความที่ลิงก์มาควรจะทำให้เกิดข้อสงสัยแบบนั้น
      ไม่รู้ว่าคุณกำลังโยงความสัมพันธ์เชิงเหตุและผลระหว่างสองเรื่องนี้หรือเปล่า แต่ปัญหาไม่ได้อยู่ที่ตัวอัลกอริทึม แต่อยู่ที่ อินเทอร์เฟซ สำหรับเข้าถึงอัลกอริทึมนั้น
    • ผมกำลังเขียนหนังสือหนึ่งเล่มอยู่พอดี โดยตั้งอยู่บนความกังวลนั้นแหละ: pmfpbook.org
  • ตาม FAQ เครื่องมือนี้แบ่งคีย์เข้ารหัสด้วย Shamir secret sharing แต่จริง ๆ แล้วถ้าใช้ Reed-Solomon ก็สามารถบรรลุเป้าหมายเดียวกันได้โดยไม่ต้องมีคีย์เข้ารหัส
    ก่อนอื่นให้ประมวลผลข้อมูลอินพุตด้วย all-or-nothing transform (AONT) แล้วค่อยแบ่งเป็นชิ้นส่วน Reed-Solomon จำเป็นต้องใช้ AONT เพราะ Reed-Solomon อ่อนไหวต่อ distinguishing attack และมีโอกาสสูงที่จะรั่วข้อมูลของอินพุต
    [1] <https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_cor...>
    [2] <https://en.wikipedia.org/wiki/All-or-nothing_transform>
    [3] <https://en.wikipedia.org/wiki/Distinguishing_attack>

    • วิธีนั้น ปลอดภัยในเชิงทฤษฎีสารสนเทศ ไหม? Shamir secret sharing เป็นแบบนั้น และคณิตศาสตร์ก็เรียบง่ายมาก
      ถ้าพูดให้เคร่งครัด ใน Shamir เองขั้นตอนการเข้ารหัสก็ไม่จำเป็นเช่นกัน เพียงแต่การเข้ารหัสตัวความลับเอง แล้วใช้ SSS แค่กับคีย์ มีข้อดีอยู่ ไม่รู้ว่า Horcrux ทำงานแบบนั้นไหม แต่เครื่องมือคล้าย ๆ กันของผมอย่าง Paperback ทำแบบนั้น
      [1]: https://github.com/cyphar/paperback
    • เจอโปรเจกต์ที่ดูเหมือนใช้วิธีนี้เป๊ะ ๆ: <https://github.com/atbarker/AONT-RS>
      บทความวิจัย: <https://www.usenix.org/legacy/event/fast11/tech/full_papers/...>
  • วิธี “แบ่งไฟล์ที่เข้ารหัสด้วยรหัสผ่านออกเป็นชิ้น ๆ เพื่อให้ประกอบกลับได้แม้บางชิ้นจะหายไป” นั้นพอนึกออกได้หลายแบบ แต่จุดที่น่าสนใจคือสามารถทำแบบนั้นได้ โดยไม่ต้องใช้รหัสผ่าน
    ในฐานะคนที่ชอบหัวข้อความปลอดภัยหรืออัลกอริทึม นี่เป็นของที่น่าสนใจทีเดียว ผมน่าจะไปขุดซอร์สโค้ดและอ่านเทคนิคที่เกี่ยวข้อง เพราะอยากรู้ว่าเขาทำอย่างไร แต่อย่างไรก็ดี ยังไม่ค่อยแน่ใจว่าของแบบนี้มีประโยชน์ตรงไหน กำลังคิดอยู่ว่ามันมี threat model ที่มีความหมายในฐานะ “ชั้นเปลือกหัวหอม” อีกชั้นสำหรับปกป้องข้อมูลอ่อนไหวหรือไม่ หรือมีจุดที่เหนือกว่า use case ที่แก้ได้ดีกว่าด้วยวิธีอื่นอยู่แล้วหรือเปล่า
    ผู้เขียนเองก็เปรียบเทียบแบบขำ ๆ ระหว่างปัญหาการจำรหัสผ่านไดอารี่เก่ากับการจำที่ซ่อนให้เพียงพอ ส่วนตัวคิดว่าอย่างหลังน่าจะเป็นปัญหาใหญ่กว่ามาก คงต้องลดจำนวนชิ้นส่วนและเพิ่มจำนวนที่ซ่อน แต่ถ้าทำแบบนั้น ความปลอดภัยที่ได้ก็จะลดลง[0]
    นึกถึง multisig อยู่เหมือนกัน แต่ที่ผมเคยเจอมีแค่ประมาณว่า “ต้องเสียบ USB key และรันโปรแกรมร่วมกับเพื่อนร่วมงานอีกสองคนเพื่อปล่อยอัปเดตหนึ่งตัว” ทุกคนต้องให้ key ของตัวเอง และอยู่ในสภาพว่า “ถ้าผมลาป่วย อัปเดตก็ออกไม่ได้” ไม่รู้ว่านั่นเป็นข้อจำกัดของเครื่องมือ หรือเพราะตอนนั้นยังเป็น alpha เลยตั้งค่าไว้แบบนั้น
    ถึงอย่างนั้นก็น่าสนใจมาก
    [0] แต่ “ใต้ฟูก” ก็น่าจะมีความปลอดภัยระดับใกล้เคียงกับการตั้งรหัสผ่านเป็น “password”

    • เอาไว้แชร์ข้อมูลให้คนใช้ในกรณีฉุกเฉินได้ไหม? คือเก็บข้อมูลไว้หลายตำแหน่ง แต่ให้เฉพาะคนที่ เข้าถึงได้ 3 แห่ง จากทั้งหมดเท่านั้นถึงจะอ่านได้
      กลไกความปลอดภัยจริง ๆ คือการควบคุมการเข้าถึงทางกายภาพแบบเดิม ขโมยต้องบุกเข้าไปสามแห่งถึงจะได้ข้อมูล
      จะเข้ารหัสข้อมูลแล้วแบ่งรหัสผ่านออกเป็นสามชิ้นเก็บไว้คนละที่ก็ได้ แต่แบบนั้นต้องเก็บทั้งข้อมูลและรหัสผ่าน
  • เป็นสิ่งที่ดูเกี่ยวข้องกันจากชื่อ น่าจะมีมากกว่าหนึ่งโปรเจกต์ด้วยซ้ำ ยังมีอะไรอีกบ้างนะ?
    Horcrux: Split your file into encrypted fragments - https://news.ycombinator.com/item?id=29395575 - พฤศจิกายน 2021, 11 ความเห็น
    Show HN: Horcrux, a Playground for Shamir Secret Sharing - https://news.ycombinator.com/item?id=26256726 - กุมภาพันธ์ 2021, 40 ความเห็น
    Horcrux Encrypted Messaging - https://news.ycombinator.com/item?id=24322069 - สิงหาคม 2020, 93 ความเห็น
    I made an app that lets you split a file into horcruxes - https://news.ycombinator.com/item?id=24026445 - สิงหาคม 2020, 80 ความเห็น
    You can now make horcruxes out of your confidential files - https://news.ycombinator.com/item?id=21933983 - มกราคม 2020, 17 ความเห็น

  • นึกถึง parity file ของ Usenet เลย เมื่อก่อนจะแบ่ง archive ขนาดใหญ่ออกเป็นไฟล์เล็กหลายไฟล์กับ parity file จำนวนหนึ่งแล้วอัปโหลด เช่น แม้มีแค่ n-3 ไฟล์จาก n ไฟล์ ก็ยังสร้าง archive ต้นฉบับกลับมาใหม่ได้
    https://en.wikipedia.org/wiki/Parchive

  • เพิ่งรู้ไม่นานมานี้ว่า Clevis ก็รองรับ Shamir secret sharing ด้วย จริง ๆ แล้วนี่เป็นวิธีเดียวที่จะตั้งค่า pin หลายตัวที่เป็นชนิดและสิทธิ์เดียวกันได้ พูดได้ว่าเป็น RAID0 ของ SSS ประมาณนั้น
    https://github.com/latchset/clevis#pin-shamir-secret-sharing

  • คิดว่าอันนี้ดูเนี้ยบดีเลยเข้าไปดู repository แล้วพบว่าคนทำคือคนเดียวกับที่ทำ lazygit/lazydocker ดีใจที่เห็นเขาผลิตงานออกมาเยอะ

  • ใน FAQ มีคำถามว่า “นี่ไม่ต่างจาก Horcrux ในจักรวาล Harry Potter เหรอ?” และตอบว่า “ค่อนข้างคล้ายกันนะ ไม่ควรให้ Horcrux อันเดียวชุบชีวิตไฟล์ต้นฉบับได้ แต่ทำให้สองอันทำได้ก็ได้ ต่างกันแค่อันเดียวเท่านั้น รุกฆาต แฟน ๆ Harry Potter”
    แต่แก่นของ Horcrux คือการวาง backup ไว้หลายที่ เครื่องมือนี้ที่เอา backup ไป backup ไว้หลายที่เป็นตัวอย่างที่ใช้ชื่อได้เหมาะกว่ามาก: https://github.com/chrispoole643/horcrux. รุกฆาต, jesseduffield ;)

    • ใช่ แต่ก็ไม่ใช่เสียทีเดียว ในเชิงเทคนิค Horcrux เป็น backup ก็จริง แต่น้ำหนักทางอารมณ์ของแนวคิดนั้นอยู่ที่การแยกวิญญาณและลดทอนแก่นแท้ของตัวเองลงเพื่อรับมือกับความเสี่ยง
      partial backup จึงเข้ากับจิตวิญญาณของไอเดียนั้นมากกว่า
      เพิ่มเติมคือ ผมอ่านแนวคิดนั้นว่าเป็นการโจมตีความสำส่อน เหมือน “Whore crux” ในทางกลับกัน Lord of the Rings ก็อาจมองได้ว่าเป็นการโจมตีการแต่งงาน เพราะเมื่อสวมแหวนแล้วจะล่องหน และค่อย ๆ เลือนหายกลายเป็นสิ่งว่างเปล่าเหมือน “เนยที่ถูกปาดบาง ๆ บนขนมปังมากเกินไป”