זהו, אחרי מעל שלושה חודשים של פיתוח, ותוך הפגנת המון סבלנות מצד החברה שלי, הצלחתי לשחרר אתמול את rsyncrypto גרסה 0.16.
כל מי שלא מעורה, rsyncrypto הינה תוכנה שמצפינה קבצים. היא משמשת כחלק ממנגנון הגיבויים של לינגנו. למי שבאמת לא מעורה, לינגנו היא החברה שהקמתי.
הדבר שמייחד את rsyncrypto הינה היכולת להצפין את הקובץ, כך שהוא לא קריא מבלי שיש לכם מפתח לפתיחתו (אחד משני מפתחות, למעשה. יש מפתח נפרד לכל קובץ, ויש מפתח “מסטר” שפותח את כל הקבצים שלכם). טוב, זה לא באמת יוצא דופן. מה שיוצא דופן הוא שגם אחרי שהצפנתם את הקבצים, אם אתם חוזרים על ההצפנה עם אותו הקובץ אחרי שעבר שינוי קל, לא כל הקובץ המוצפן משתנה.
באופן פורמלי טהור, מדובר בהחלשה של מערכת ההצפנה. באופן פרקטי, הדבר אומר שניתן להעביר את הקובץ עם השינויים לשרת אחר תוך שימוש בכמות מאוד קטנה, יחסית, של נפח תעבורה. כלי אחד כזה נקרא “rsync, ומכאן שמו של rsyncrypto.
מה שמייחד את גרסה 0.16, הוא גם הסיבה שלקח מעל שלושה חודשים ושתי בטות כדי לשחרר אותה, זה הצפנה גם של שמות הקבצים. מטעמים פרקטיים, לא רציתי שכל הקבצים הפתוחים יישמרו בקובץ אחד גדול. אפשר לעשות את זה דיי בקלות עם rsyncrypto, אבל זה מקטין את הגמישות בפתיחת הקבצים אחר כך. על כן, rsyncrypto שמר מבנה עץ של הקבצים שהוא מצפין שהוא מראה של מבנה הקבצים הפתוח.
לדבר הזה יש חסרונות כאשר מדובר בשירות כמו מנגנון הגיבויים של לינגנו, לדוגמא, גם אם הקבצים עצמם לא קריאים. תחשבו על משתמש בשירות שהוא עורך דין. גם אם לא ניתן לקרוא את המסמכים שהוא מגבה, זה שמישהו יכול לראות שיש לו מגירה בשם “Documents”, בתוכה מגירה בשם “Clients”, בתוכה מגירה בשם “IBM”, ובתוכה מגירה בשם “Microsoft merger agreement.doc” (דוגמא היפוטתית לצורך ההדגמה) יכול לעשות נזק רב.
גרסה 0.16 מצפינה את שמות הקבצים. אני חושב שהמשפט הזה, כשלעצמו, לא מדוייק. מה שבפועל עושים זה מגרילים רצף אקראי של תווים, ומקצים אותו לקובץ שמצפינים. מה שמצפינים זה את הרשימה של המיפויים – קובץ X נקרא עכשיו Y.
למעשה, החל מגרסה זו אני מרגיש ש-rsyncrypto מתאים לשימוש לקהל הרחב. עד עכשיו הלקוחות של מנגנון הגיבוי היו לקוחות של לינגנו ממילא, שהסברתי להם את המגבלות ו”לקחו את הסיכון”. עם השקת הגרסה הזו, אני מרגיש שהמוצר בשל מספיק לשימוש של כולם. יש עוד בדרך שני שיפורים משמעותיים ליכולות של rsyncrpto, אבל הם לא חשובים כמו השינוי הזה. במובנים מסויימים מדובר פה בגרסה הראשונה של המוצר.
הקישור למעלה וברשימות. כולכם מוזמנים להוריד ולחוות דעה.
שחר
מזל טוב.
איפה אתה שומר את הקובץ מיפוי? הוא מאוד רגיש, אם הוא הולך לאיבוד זה יהיה מאוד עצוב.
אגב, העברתי את הבלוג לשרת שלי, תכנס ותעיף מבט :).
הצורה להשתמש במיפוי היא ע"י אופציה באופן הבא. אם בד"כ היית מגירה שלמה ע"י:
הרי שעכשיו אתה מוסיף:
זה מייצר שני קבצים עם המיפויים. קובץ בשם ~/mapfile שמכיל את המיפויים (אם תהפוך כל null לשורה חדשה הוא אפילו קריא כמו שהוא), והשני קובץ בשם הקבוע "filemap" תחת הספריה שאליה הצפנת (enc), שהוא הגרסה המוצפנת של הנ"ל.
במילים אחרות, enc יכיל הרבה קבצים שהשם שלהם נראה כמו מספר hex, וקובץ אחד בשם filemap.
שחר
קודם כל מזל-טוב!
עכשיו מספר שאלות –
א) לגבי ההצפנה עצמה – אם הבנתי נכון, אתה מצפין את המידע בצורה incremental-ית? כלומר – אם ההצפנה של "hello" היא "sfdG234Ca" אז ההצפנה של "hello world" היא "sfdG234Ca97dccd3gmn4g" (כאשר התחילית היא אותה תחילית" ? האם לכך אתה מתכוון? אם לא, אתה יכול לתת הסבר של 5 דק’ למישהו שמבין רק את הבסיס של הצפנה מודרנית?
ב) לגבי התוספת של filemap – במידה והקובץ נהרס (אם בטעות ואם בזדון) האם כל המידע על מבנה העץ הולך לאיבוד?
האם אי אפשר להכניס את המידע על שם הקובץ לתוך הקובץ המוצפן עצמו?
כלומר – התוכנה מגרילה שם רנדומלי לכל חלק מהעץ ומכניסה אותו לקובץ זמני, לכל קובץ שעובר הצפנה נעשית בדיקה מול הקובץ – הקובץ מוצפן ומתווסף לו header שמכיל את השם המלא שלו. כאשר אתה פותח את ההצפנה – התוכנה מסירה את ה header מתוך הקובץ עצמו ומחליפה את השם בשם האמיתי. את הקובץ הזמני שיצרת אתה יכול למחוק מיד בתום ההצפנה.
עידו.
א. לא, אני חושש שהסבר ה-5 דקות הוא מעבר להיקף של 1000 התווים של תגובה פה. כל ההצפנות הן תחיליות, בגלל שלעשות כל דבר אחר יהיה התאבדות מבחינת זמן ביצוע. מה שכן, rsyncrypto עושה דברים מאוד משעשעים כדי לטפל בצורה הגיונית בשינויים שנעשו *באמצע* קובץ.
ב. נכון להיום, המידע נשמר רק בשני ההעתקים של filemap. באחת הגרסאות הקרובות rsyncrypto יתחיל לשמור מידע מטא (זמני שינוי, בעלים, הרשאות) על הקבצים בתוך הקבצים עצמם, ואז הוא גם ישמור שם את שם הקובץ המקורי. כשזה יקרה, תהיה פקודה שתיצור את filemap מתוך הקבצים המוצפנים (בהנחה שיש לך את המפתח שלהם, כמובן).
אתה יכול למצוא רשימה של ה-todo העתידיים ב-http://sourceforge.net/docman/display_doc.php?docid=30015&group_id=129038.
שחר
אז קובץ המיפוי יושב על השרת, ובמקרה הזה, בספרית הבית של המשתמש?
rsyncrypto לא מדבר ברשת בכלל. *אם* בחרת לסנכרן את הספריה enc לשרת (מה שאני חייב להודות שסביר להניח שעשית), אזי יהיה על השרת גרסה מוצפנת של קובץ המיפויים, כן.
שחר
לא, אני לא מסתמש בrsyncrypto כרגע, אני סתם תוהה, מבחינת אבטחת מידע, איפה יושב קובץ המיפויים.
בהצלחה לך!
הורדתי את קובץ ההתקנה ל’חלונות’ ואלא אם כן פיספסתי משהו, אני לא ממש מצליח למצוא הוראות התקנה ל’חלונות’.
אלא אם כן ההוראות לקימפול תקפות גם ל’חלונות’.
כן, טוב. אני אכן קצת הזנחתי את חלונות. אני חושב שפיספסת טיפה עם הגרשיים – הם היו אמורים להיות סביב ה"התקנה" http://israblog.nana.co.il/moodicons/blink.gif">.
התקנה לחלונות – פותחים את הזיפ. שמים את הקובץ "rsyncrypto.exe" איפושהו. שמים את שני ה-DLLים או בספריה הכללית של המערכת (c:\windows\system32), או באותה ספריה ששמת את קובץ ה-exe. את הקובץ gzip.exe צריך לשים איפשהו שנמצא ב-path. אני מניח שהכי פשוט או לשים גם אותו ב-system32, או להוסיף את הספריה שבה שמת את rsyncrpto ל-path.
לגבי הוראות קומפילציה – אפילו לא קרוב http://israblog.nana.co.il/moodicons/sad.gif">. צריך קודם לקמפל את openssl ואת argtable, ולכוון ל-visual studio להשתמש ב-headers ובספריות שלהם. אחרי זה מקמפלים את rsyncrypto כפרוייקט, כרגיל.
בהחלט יכול להיות שאפשר יהיה לקמפל אותו תחת Mingw. קצת לא סביר, לאור זה שלא ניסית. אני מאמין שיהיו בעיות עם זה שהוא יחשוב ש-/ זה התו שמפריד בין ספריות במקום \. במחשבה שניה, אולי לא. תנסה.
שחר
ובכן, בהחלט ענית לי על כמה שאלות.
רק שאת הקובץ rsyncrypto.exe אני לא מצליח למצוא בשום מקום.
לפחות לא בחבילות שהורדתי מsourceforge
אאאאאאאאאאאאאאהההההההההההההההה!!!!!!!!!!!!!!!!!!
הוא לא שם!!!!!!!
אני מייד מתקן את זה.
שחר
תגיד לי אם זה נפתר.
שחר
עוד שתי נקודות חשובות. בעצם שלוש.
1. ה-gzip שמגיע עם ההתקנה לחלונות הוא לא ה-gzip הרגיל. הוא שונה כדי לתמוך ב-rsyncable. אם יש לך התקנה אחרת של gzip על המערכת, קרא בתיעוד על "gzip".
2. כדי להשתמש ב-rsyncrypto אתה צריך לייצר מפתח RSA. הדרך הכי טובה שאני מכיר היא באמצעות OpenSSL (למרות שכל מי שיודע לייצר מפתחות לשרתי Web מאובטחים ייצר לך מפתח נכון).
3. המשובים שלכם מאוד מאוד מאוד חשובים לי. אם אתה מוצא בעיות, אנא שלח מייל (הכי טוב לרשימת התפוצה של rsyncrypto, אבל כאן בתגובות זה גם בסדר).
שחר
מזל טוב – עכשיו לך לפצות את החברה על כל הסבלנות שנתנה לך.
(קח מילה של בעל נסיון)
כבר בוצע (אני חושב).
תודה על הטיפ, בכל מקרה.
שחר
1. מזל טוב
2. נראה לי שכדאי לך לקדם את מספר הגירסה.
מספר גירסה 0.16 לא נותן תחושה טובה מבחינת יציבות.
ע"פ התיאור שלך הרבה יותר מתאים לתוכנה מספר כמו 2.0RC .
(הסבר – ברגע שיש גירסה שלקוחות משתמשים בה, אפילו תחת הגבלות זו יכולה להחשב גירסה 1.0, כיון שהוספת תכונות משמעותיות – אתה יכול להקפיץ גירסה ראשית, אם זה עדיין בבדיקות אז זו גירסת RC – Realese Candidate) או לפחות 1.5RC (אם אתה רוצה לחכות ל- 2.0 עם התכונות הנוספות שבקנה).
כמובן שזה הכל עניין עיסקי של איך התוכנה שלך נראית מול לקוחות ששמעו עליה בפעם הראשונה, ולא כללים.