โฮสติ้งรหัสความรู้เป็นศูนย์? [ปิด]


28

จากการเปิดเผยเมื่อเร็ว ๆ นี้เกี่ยวกับการตรวจสอบข้อมูลที่จัดเก็บโดยผู้ให้บริการออนไลน์ของรัฐบาลอย่างกว้างขวาง

บริการ zero-knowledge คือบริการที่เก็บข้อมูลทั้งหมดที่เข้ารหัสด้วยคีย์ที่ไม่ได้จัดเก็บไว้บนเซิร์ฟเวอร์ การเข้ารหัสและถอดรหัสเกิดขึ้นที่ฝั่งไคลเอ็นต์และเซิร์ฟเวอร์ไม่เคยเห็นข้อมูลธรรมดาหรือกุญแจ เป็นผลให้ผู้ให้บริการไม่สามารถถอดรหัสและให้ข้อมูลกับบุคคลที่สามได้แม้ว่าจะต้องการ

เพื่อให้ตัวอย่าง: SpiderOakสามารถดูเป็น Dropbox เวอร์ชันที่ไม่มีความรู้

ในฐานะโปรแกรมเมอร์เราวางใจอย่างมากและไว้วางใจข้อมูลที่ละเอียดอ่อนที่สุดของเรา - รหัสของเรา - สำหรับผู้ให้บริการออนไลน์ในระดับหนึ่ง ๆ : ผู้ให้บริการโฮสติ้งรหัส (เช่น Bitbucket, Assembla และอื่น ๆ ) แน่นอนว่าฉันกำลังพูดถึงที่เก็บส่วนตัวที่นี่ - แนวคิดของศูนย์ความรู้ไม่มีประโยชน์สำหรับที่เก็บสาธารณะ

คำถามของฉันคือ:

  1. มีอุปสรรคทางเทคโนโลยีใด ๆ ในการสร้างบริการโฮสติ้งโค้ดที่ไม่มีความรู้หรือไม่ ตัวอย่างเช่นมีบางอย่างเกี่ยวกับโปรโตคอลเครือข่ายที่ใช้โดยระบบควบคุมเวอร์ชันยอดนิยมเช่น SVN, Mercurial หรือ Git ที่จะทำให้มันยาก (หรือเป็นไปไม่ได้) ในการนำรูปแบบการสื่อสารข้อมูลระหว่างไคลเอนต์และเซิร์ฟเวอร์มาเข้ารหัสด้วย กุญแจสำคัญที่เซิร์ฟเวอร์ไม่รู้

  2. วันนี้มีบริการโฮสติ้งโค้ดที่ไม่มีความรู้หรือไม่?


1
หากไม่มีการเข้ารหัสโฮโมมอร์ฟิคฉันไม่เห็นว่าไซต์โฮสติ้งโค้ดที่ไม่มีความรู้จะให้ประโยชน์ใด ๆ กับดรอปบ็อกซ์รุ่นที่ไม่มีความรู้ ฉันไม่เชื่อว่ามีใครมากับรูปแบบดังกล่าวซึ่งทั้งปลอดภัย (เช่นปลอดภัยพอที่ผู้เชี่ยวชาญเชื่อถือได้) และเร็วพอที่จะใช้งานได้
Brian

2
@AndresF ฉันสามารถสันนิษฐานได้ว่า SpiderOak หมายความว่า diff-generation เกิดขึ้นบนไคลเอนต์, เซิร์ฟเวอร์เก็บการเข้ารหัส diffs แล้วแอพพลิเคชั่น diff-to-base จะเกิดขึ้นอีกครั้งบนไคลเอนต์เมื่อ diff และ base ถูกเข้ารหัส ฉันยอมรับว่าภาษาของพวกเขาไม่ชัดเจน
apsillers

2
@apsillers: หรือคุณสามารถนำเนื้อหาดังกล่าวลงในไฟล์และใช้เพื่อระบุตัวไฟล์ (เช่นหากมีคนพยายามใช้การเข้ารหัสเพื่อซ่อนการละเมิดลิขสิทธิ์)
Brian

4
ไม่ใช่สิ่งที่ฉันมีประสบการณ์ แต่ฉันสามารถจินตนาการถึงอุปสรรคทางเทคโนโลยีที่เป็นไปได้อย่างหนึ่งคือการมีบริการโฮสติ้งโค้ดที่ไม่มีความรู้: ผู้ใช้ทุกคนไม่จำเป็นต้องรู้ / ใช้คีย์เดียวกันแน่นอน และหากเป็นกรณีนี้กลไกการตรวจสอบความถูกต้องที่รับรองระดับการเข้าถึงของผู้ใช้แตกต่างกันอย่างไร
CB

2
@gnat: ฉันไม่ได้ขอคำแนะนำ ฉันแค่ถามว่ามีบริการประเภทที่ฉันอธิบายอยู่หรือไม่ การมีอยู่ของบริการดังกล่าวจะให้หลักฐานว่าอุปสรรคทางเทคโนโลยีที่ฉันถามถึงก่อนหน้านี้ในคำถามนั้นสามารถเอาชนะได้
HC4 - คืนสถานะโมนิกา

คำตอบ:


3

คุณสามารถเข้ารหัสแต่ละบรรทัดแยกกัน หากคุณสามารถที่จะรั่วไหลชื่อไฟล์และความยาวบรรทัดโดยประมาณและหมายเลขบรรทัดที่มีการเปลี่ยนแปลงบรรทัดเกิดขึ้นคุณสามารถใช้สิ่งต่อไปนี้:

https://github.com/ysangkok/line-encryptor

เนื่องจากแต่ละบรรทัดมีการเข้ารหัสแยกต่างหาก (แต่มีคีย์เดียวกัน) การเปลี่ยนแปลงที่อัปโหลดจะ (เหมือนปกติ) จะเกี่ยวข้องกับบรรทัดที่เกี่ยวข้องเท่านั้น

หากปัจจุบันยังไม่สะดวกพอคุณสามารถสร้างที่เก็บ Git สองแห่งได้หนึ่งแห่งซึ่งมีข้อความธรรมดาและอีกแห่งที่มี ciphertext เมื่อคุณส่งข้อมูลในพื้นที่เก็บข้อมูลแบบธรรมดา (ซึ่งเป็นแบบโลคัล) คอมมิตฮุคสามารถรับส่วนต่างและรันผ่านตัวเข้ารหัสบรรทัดที่อ้างถึงข้างต้นซึ่งจะนำไปใช้กับที่เก็บ ciphertext การเปลี่ยนแปลงที่เก็บ ciphertext จะถูกคอมมิตและอัพโหลด

ตัวเข้ารหัสบรรทัดด้านบนคือผู้ไม่เชื่อเรื่องพระเจ้า SCM แต่สามารถอ่านไฟล์ diff แบบรวม (ของธรรมดา) และเข้ารหัสการเปลี่ยนแปลงและนำไปใช้กับไซเฟอร์เท็กซ์ สิ่งนี้ทำให้สามารถใช้งานได้บน SCM ใด ๆ ที่จะสร้าง diff แบบรวมเป็นหนึ่งเดียว (เช่น Git)


คุณไม่สามารถใช้ทำความสะอาดรอยเปื้อนของคอมไพล์ได้หรือไม่?
svick

@svick: คุณทำได้ แต่อย่างนั้นฉันไม่เห็นว่าคุณจะอนุญาตให้หลีกเลี่ยงการเข้ารหัสไฟล์ทั้งหมดอีกครั้งได้อย่างไร แต่แน่นอนว่ามันจะไม่สำคัญสำหรับโค้ดเนื่องจากขนาดไฟล์เล็ก แต่ไม่จำเป็นต้องมี "line เข้ารหัส" ดังนั้นคุณสามารถใช้เครื่องมือเข้ารหัสใด ๆ
Janus Troelsen

ตัวอย่างข้อความจำนวนมาก (ที่มีโครงสร้างที่รู้จัก) จะเป็นสิ่งที่จะทำให้ง่ายต่อการโจมตีคีย์หรือไม่ ทุกบรรทัดว่างจะเข้ารหัสเหมือนกัน ทุกจุดเริ่มต้นและจุดสิ้นสุดของ javadoc จะเหมือนกัน ตอนนี้คุณรู้ข้อความที่ชัดเจนและข้อความตัวเลขสำหรับส่วนของรหัสที่สามารถใช้ได้ สิ่งนี้มีแนวโน้มว่าจะไม่เป็นประโยชน์กับผู้ใดก็ตาม แต่เป็นมือสมัครเล่น (ใครก็ตามที่มี crypto ประเภทที่ผ่านการฝึกอบรมหรือกำลังการประมวลผลที่เพียงพอสามารถทำลายมันได้

@MichaelT: ไม่เพราะ IV ลองด้วยตัวคุณเอง :) <IV>,<ciphertext>ใช้การดำเนินการเชื่อมโยงสายการเข้ารหัส
Janus Troelsen

1
@svick: บรรทัดจะถูกเข้ารหัสเป็นรายบุคคล หากคุณเปลี่ยนบรรทัดทั้งบรรทัดจะได้รับการเข้ารหัสอีกครั้ง แต่ใช้ IV ใหม่ (เช่นเคย) แต่ส่วนที่เหลือของไฟล์จะไม่ถูกแตะต้อง! การเข้ารหัสเป็นสิ่งที่กำหนดได้ แต่ IV ก็เป็นปัจจัยการผลิตเช่นกันและจะถูกสุ่มเลือก
Janus Troelsen

1

ฉันไม่คิดว่ามีอุปสรรคใด ๆ - พิจารณา SVN สิ่งที่ถูกส่งไปยังเซิร์ฟเวอร์สำหรับการจัดเก็บเป็นเดลต้าระหว่างสิ่งที่รุ่นก่อนหน้าและปัจจุบันของรหัสของคุณ - ดังนั้นคุณเปลี่ยน 1 บรรทัดเพียงแค่บรรทัดนั้นจะถูกส่งไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์จะ 'สุ่มสี่สุ่มห้า' เก็บไว้โดยไม่ทำการตรวจสอบข้อมูลเอง หากคุณเข้ารหัสเดลต้าและส่งสิ่งนั้นมาแทนจะไม่มีผลกระทบใด ๆ กับเซิร์ฟเวอร์ในความเป็นจริงคุณไม่จำเป็นต้องแก้ไขเซิร์ฟเวอร์เลยแม้แต่น้อย

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

นี่หมายความว่าคุณไม่มีเว็บไซต์ที่มีคุณสมบัติการดูโค้ดที่หลากหลายไม่มีเบราว์เซอร์ที่เก็บข้อมูลด้านเซิร์ฟเวอร์หรือโปรแกรมดูบันทึก ไม่มีรหัสที่แตกต่างไม่มีเครื่องมือตรวจสอบรหัสออนไลน์

บางสิ่งเช่นนี้มีอยู่แล้ว ณ จุดหนึ่ง Mozy เก็บข้อมูลของคุณด้วยรหัสส่วนตัวของคุณ (คุณสามารถใช้ของพวกเขาเองและพวกเขาก็ส่งเสียงเกี่ยวกับ "ถ้าคุณทำกุญแจของคุณหายไปเราไม่สามารถกู้คืนข้อมูลของคุณได้ คุณ "แต่มีการกำหนดเป้าหมายเพิ่มเติมที่ผู้ใช้ทั่วไป) Mozy ยังเก็บประวัติไฟล์ของคุณด้วยดังนั้นคุณสามารถเรียกดูเวอร์ชันก่อนหน้าได้ ตรงที่มันหล่นลงมาคือการอัปโหลดนั้นเป็นประจำไม่ใช่เช็คอินเมื่อคุณต้องการและฉันเชื่อว่ามันทิ้งเวอร์ชั่นเก่าเมื่อคุณใช้พื้นที่เก็บข้อมูลหมด แต่แนวคิดอยู่ที่นั่นพวกเขาสามารถปรับเปลี่ยนเพื่อให้การควบคุมแหล่งที่ปลอดภัยโดยใช้ระบบที่มีอยู่ของพวกเขา


Re: "นี่หมายความว่าคุณไม่มีเว็บไซต์ที่มีคุณสมบัติการดูโค้ดที่หลากหลายไม่มีเบราว์เซอร์ที่เก็บข้อมูลด้านเซิร์ฟเวอร์หรือตัวดูบันทึกการทำงานไม่มีรหัสแตกต่างไม่มีเครื่องมือตรวจสอบรหัสออนไลน์" - คุณยังสามารถมีสิ่งเหล่านี้ได้ถ้าตรรกะของแอปพลิเคชันอยู่ในฝั่งไคลเอ็นต์ JS และทำให้คุณป้อนรหัสผ่าน / คีย์ของคุณ (แต่ไม่ส่งไปยังเซิร์ฟเวอร์) ใช่ไหม?
HC4 - คืนสถานะโมนิก้า

ใช่มันทำได้ .... ทุกอย่างจะตราบเท่าที่รู้ว่าได้รับข้อมูลที่เข้ารหัสผ่านเครือข่าย มันเป็นข้อ จำกัด ที่ชัดเจนของเซิร์ฟเวอร์ที่ไม่สามารถถอดรหัสข้อมูลได้
gbjbaanb

1

ฉันเกลียดที่จะทำหนึ่งในนั้น 'ไม่ตอบคำถามของคุณ' แต่ ..

ฉันสามารถคิดถึงโซลูชันที่พร้อมใช้งานสองวิธีซึ่งควรจัดการกับความกังวลเหล่านี้

  1. โฮสต์เซิร์ฟเวอร์ Git ส่วนตัวด้วยตัวคุณเอง จากนั้นให้วางเซิร์ฟเวอร์นั้นบน VPN ที่คุณให้สิทธิ์การเข้าถึงสมาชิกในทีมของคุณ การสื่อสารทั้งหมดไปยังและจากเซิร์ฟเวอร์จะถูกเข้ารหัสและแน่นอนคุณสามารถเข้ารหัสเซิร์ฟเวอร์ที่ระดับระบบปฏิบัติการ

  2. BitSync ควรทำเคล็ดลับเช่นกัน ทุกอย่างจะถูกเข้ารหัสและในเครือข่ายขนาดใหญ่ซึ่งจะสามารถใช้ได้จากทุกที่ อาจเป็นแอปพลิเคชั่นที่ดีจริง ๆ ของเทคโนโลยี BitCoin / BitMessage / BitSync นี้ทั้งหมด

ท้ายที่สุดผู้คนที่https://security.stackexchange.com/อาจมีความเข้าใจมากขึ้น


เกี่ยวกับ BitSync: คุณแนะนำให้ใช้เพื่อทดแทนระบบควบคุมเวอร์ชันหรือใช้ร่วมกับระบบควบคุมเวอร์ชันหรือไม่? ถ้าเป็นเช่นนั้นแน่นอน แต่นั่นไม่น่าสนใจมาก ฉันสามารถแชร์ไฟล์ผ่าน SpiderOak และมันจะรวมศูนย์ แต่ก็ยังไม่มีความรู้ หากหลังแล้วอย่างไร
HC4 - คืนสถานะโมนิกา

1
@ HighCommander4 ยังไม่ได้ลอง แต่ไม่ควรมีเหตุผลใด ๆ ที่ทำให้มันไม่ทำงาน .. คุณไม่สามารถตั้งค่าการซิงค์เพื่อแชร์โฟลเดอร์คอมไพล์เริ่มต้นแล้วแค่ทำตามปกติ'git push ./syncedFolderActingAsServer/MyAwesomeProject/src/'เหรอ? นอกจากนี้คุณยังสามารถรับสิทธิ์ในระดับคอมไพล์ ฯลฯ บางคนควรลองใช้!
เป็ดยาง

1

ดังที่ฉันเข้าใจแล้ววิธีการgit pullทำงานคือเซิร์ฟเวอร์ส่งไฟล์แพ็คที่มีวัตถุทั้งหมดที่คุณต้องการ แต่ไม่มีในขณะนี้ git pushและในทางกลับกันสำหรับ

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

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.