מאמרים בנושא ‏CppCMS‏.

גם Tatoeba תשתמש ב־CppCMS

ב־יום שני, 13 ביוני 2011, מאת ארתיום; פורסם תחת: תכנה חופשית, אינטרנט, פיתוח, תכנה ומחשבים, CppCMS, C++‎‏, Unicode; ‏7 תגובות

טטואבה, פרויקט בינלאומי המהווה מעין מילון האוסף מספר רב של משפטים, מפתח גרסה חדשה ב־C++‎ שמבוססת על CppCMS.

למעשה ידעתי על התכנון הזה כבר מזמן, אבל לא ממש עקבתי אחרי הפרויקט. בעקבות החדשות שכתבתי עליהם בפוסט הקודם, החלטתי להסתכל שוב על הפרויקט הזה וגיליתי שהם התקדמו יפה מאוד.

גרסת האלפה (עדיין מאוד בסיסית) כבר עלתה לרשת וזמינה בכתובת:‏ http://tato.sysko.fr. הגרסה הזו מחליפה את מנוע החיפוש הנוכחי העובד עם MySQL בבסיס נתונים ייחודי שהם פיתחו ותשתית הרשת שכתובה בעזרת CakePHP מתחלפת באחרת המבוססת על CppCMS.

בהודעה הזו הם מסבירים את ההחלטה שלהם לבחור ב־CppCMS. להחלטה הזו היה מספר לא מבוטל של סיבות.

בקיצור... תתחילו לקחת את CppCMS בצורה רצינית :-)

CppCMS אי שם בענן

ב־יום ראשון, 12 ביוני 2011, מאת ארתיום; פורסם תחת: תכנה חופשית, אינטרנט, פיתוח, תכנה ומחשבים, CppCMS; ‏3 תגובות

אחת הבעיות הגדולות בצבירת משתמשים פוטנציאליים של CppCMS היא בעצם למצוא משתמשים קיימים מוכרים. שזהוי כמובן בעית הביצה והתרנגלות המוכרת.

על־אף של־CppCMS יש רשימת תפוצה פעילה וידוע לי על לפחות מספר חברות שמשתמשות ב־CppCMS במוצרי embedded שלהם, עדיין רוב המשתמשים לא ממהרים לפרסם את עצמם כמשתמשים גאים של שהתשתית המיוחדת הזו.

היום בחיפוש פשוט בגוגל על "x-powered-by: cppcms" גיליתי את חברת הזנק הבאה: http://dhiti.com.

הופתעתי לגלות שהיא מפעילה מספר "שירותים בענן" המשתמשים ב־CppCMS, ביניהם: ‏http://dive.dhiti.com,‏ http://drilll.com,‏ http://intweetion.com.

אלה למעשה שירותים שמבוססים על RESTful API‏ שצד הלקוח (הדפדפן) מתקשר אתם.

אחרי שהסתכלתי באתר החברה, נזכרתי שפעם קיבלתי מהם דיווח באג ותיקנתי אותו. אבל לאחר מכן, לא ממש עקבתי אחרי ההתפתחות שלהם... עד היום כשגיליתי שירותים X-Powered-By: CppCMS.


אני שמח סוף־סוף לראות CppCMS במקום שלו הוא מיועד. אני מאוד מקווה שהפעם יתאפשר לי לספר על הפרויקט הזה באוגוסט פינגווין הקרוב.

גיוס מפתחים דרך Stackoverflow - סיבוב שני

ב־יום שישי, 21 בינואר 2011, מאת ארתיום; פורסם תחת: תכנה חופשית, פיתוח, CppCMS; ‏0 תגובות

כפי שפרסמתי בעבר האתר Stackoverflow‏ מאפשר לפרסם פרויקטי תוכנה חופשית לצורך גיוס מפתחים לפרויקט.

CppCMS זקוק לך

כל חצי שנה בפורום נפתחת רשימת פרסומות חדשה של פרויקטים חופשיים. כל אנשי הקהילה של הפורום יכולים להצביע ואם היא מקבלת 6 הצבעות או יותר היא תופיע באתר.

כמה מילים עם Stackoverflow באופן כללי.

זה פורום שאלות ותשובות בנושא פיתוח תוכנה. חברי הקהילה יכולים לענות על השאלה להצביע עליהן ולצבור "ניקוד". לעתים, ניתן לקבל שם מענה של שאלות מורכבות שקשה למצוא עליהן תשובה.

להלן מקבץ השאלות החביבות עליי:

בקשה:

כמו בפעם העברה, גם הפעם אני אשמח, אם אתם תוכלו להצביע לפרסום שלי באתר שימו לב שאתם צריכים להיות בעלי חשבון פעיל ב־Stackoverflow כדי להצביע.

כיצד בונים מערכת פרוצה מרכיבים בטוחים קריפטוגרפית

ב־יום חמישי, 13 בינואר 2011, מאת ארתיום; פורסם תחת: תכנה חופשית, פיתוח, תכנה ומחשבים, CppCMS; ‏2 תגובות

אתמול שחררתי גרסאות CppCMS חדשות בשני הענפים - היציב וענף הבטא שסגרתי בהן באג שקשור לשימוש לא נכון ברכיבים קריפטוגרפיים.

תחילת הסיפור

הסמסטר אני לוקח קורס יסודות קריפטוגרפיה של פרופ' רן קנטי. במהלך הקורס דננו בנושא הצפנה והדרישות של בטיחות.

נגיד, יש לנו אלגוריתם שיודע להצפין בצורה בטוחה: היריב לא יוכל להשיג שום מידע על התוכן של הודעות בהסתכלות על טקסט מוצפן; ואז שואלים שאלות כמו האם זה מספיק, באיזה תנאים וכו'.

עכשיו, נחזור לבעיה שאני מנסה לפתור ב־CppCMS בעזרת הצפנה.

אני רוצה לשמור מידע (session) בצד הלקוח בעוגייה ואני רוצה להבטיח שני דברים:

  1. הלקוח לא ידע מה אני שומר אצלו.
  2. הלקוח לא יוכל לשנות את המידע ששמרתי;

    הגדרת יותר מדויקת: הוא לא יוכל ליצור session (עוגייה) עם מידע שאני לא יצרתי.

הפתרון:

ניקח תוכן שאני רוצה לשמור אותו, נחשב לו checksum בעזרת פונקציה hash ונצפין אותו יחד עם ה־hash. סביר להניח שאם אין יכולת להפוך את הטקסט לטקסט מוצפן ובחזרה אז לא ניתן גם ליצור משהו שהתוכן וה-hash שלו יהיו תואמים.

האם יש אנשים שחשבו כך והשתמשו בזה לפניי? בהחלט כן - פרוטוקול WEP‏ עושה בדיוק את הדבר הזה! אז, כפי שאתם כבר בוודאי יכולים לנחש, מימשתי פתרון דומה ב־CppCMS כדי להבטיח שהלקוח לא ייצור session לא חוקי, רק שהשתמשתי בהצפנת CBC-AES וב־hash קריפטוגרפי ולא ב־CRC32 (כמו שזה היה ב־WEP).

למען הסר ספק, לא השתמשתי בשיטה הזו בגלל שראיתי שימוש בה ב־wep - אני יודע כי wep פרוץ

אז ההרצאה דנה בנושא הצפנה ובטיחות. במהלכה הוצג שהפתרון הזה לא נכון וכלל לא מבטיח בטיחות במקרה כללי! כיוון שלא הצלחתי במהלך ההרצאה להבין כיצד במקרה פרטי שלי אפשר לתקוף את המנגנון הזה, התחלתי לחפש ומצאתי מאמר מאוד מעניין שעוסק ניתוח בעיית ההצפנה ואימות הזהות ביחד ובודק פתרונות שונים.

מי שמעוניין יכול לקרוא את המאמר, אבל בגדול הוא מציג התקפה אמתית (יחסית פשוטה) כנגד השיטה כזו שעובדת עם הצפנה מבוססת CBC ו־hash שמוצמד לסוף התוכן. המאמר קובע כי כל שיטה שמסתמכת על hash פומבי לבדיקת אמתות לא תעבוד. המאמר ממליץ על אימות התוכן המוצפן בעזרת MAC‏ שעובד עם מפתח נוסף.

מה שחשוב שניתן להוכיח בקלות שאם ה־MAC שלנו בטוח וההצפנה בטוחה אז השיטה הזו תהיה בטוחה גם כן.

המעשה

אחרי הבנתי שיש לי באג קריטי במערכת ניהול ה־session בשני הענפים של CppCMS התחלתי לעבוד על התיקון (שהוא בסה"כ תיקון פשוט) ושחררתי גרסה החדש עם התיקון הנדרש.

בדיעבד אני מאוד שמח שלקחת את הקורס הזה, למרות שהוא מסוג הקורסים המאוד תיאורתיים שבד"כ אני לא אוהב ועוסק בנושאים שיחסית רחוקים הקריפטוגרפיה מעשית.

מסתבר שגם כאן, כמו בבכל דבר, אין תחליף לבסיס תאורתי מוצק.

מסקנות

שימוש באלגוריתמים בטוחים לא מבטיח שום בטיחות אם משתמשים בהם בצורה לא נכונה. לכן, בכל פעם שאתה עוסק במשהו קשור לקריפטוגרפיה, אם יש לך אפשרות תן למומחה להסתכל על מה שעשית.

האם אפשר היה לעשות אחרת?

אני חשבתי על זה - אולי אני בכוח מנסה להמציא גלגל קריפטוגרפי המחדש?

אבל ככל שאני חושב יותר, אני מבין שכנראה בהינתן הידע והניסיון שיש לי, לא יכולתי לעשות משהו יותר טוב.

  1. לא קיים פתרון סגור (קרי ספריה) לבעיה שאני צריך, בד"כ ההצפנה ואימות הן חלק מפרוטוקולים קיימים כמו TLS או SSH והם ממומשים ספציפית עבורם בצורה של תקשורת כך שהמשתמש מקבל API דמוי socket וכל מה שיש למטה מוסתר.
  2. רוב הספריות נותנות מימוש לש פרוטוקולים קיימים או אבני בניין כמו AES או MAC שאתה אחראי לחבר אותם ביחד בצורה נכונה, כך למשל, אם אתה לא מאתחל נכון את iv באלגוריתם CBC אתה תיצור חור אבטחה בקלות.
  3. עשיתי כמיטב יכולתי והשתמשתי ברכיבים מוכנים, לא כתבתי מימושים של AES או של SHA1 מחדש, נעזרתי בקוד קיים בדוק ומתוחזק היטב.

הבעיה שהרכבתי את האלגוריתמים קריפטוגרפיים בצורה לא נכונה; ולמען האמת, אני לא הראשון ולא האחרון שעשה דבר כזה - היו גדולים לפני שעשו טעויות כאלה וגם יהיו אחרי.

בהסתכלות לאחור - נראה עשיתי באמת מה שיכולתי. אם לא הייתי מפתח קוד פתוח פרטי אלא מנהל פרויקט בחברה שמפתחת פרויקט כזה אז, הייתי מזמין מומחה כדי לעשות בדיקה לקוד ולהחלטות שעשינו.

רישיון CppDB השתנה ל־BSL/MIT

ב־יום שבת, 8 בינואר 2011, מאת ארתיום; פורסם תחת: תכנה חופשית, פיתוח, תכנה ומחשבים, CppCMS, C++‎‏, Boost‏; ‏0 תגובות

החלטתי לשנות את רישיון CppDB - ספריית קישוריות ל־SQL לרישיון יותר מתירני רישיון כפול: רישיון Boost‏ או רישיון MIT‏ לבחירתכם.

בגדול, אני הייתי שמח להישאר עם רישיון יחיד - רישיון Boost, אבל ספריית MySQL לא מכילה חריגה עבורו, אז הוספתי רישיון MIT כחלופה. כך שאם אתם משתמשים ב־CppDB וב־MySQL אתם צריכים לנהוג לפי דרישות רישיון MIT.

לשינוי הרישיון היו מספר סיבות:

  1. אני רוצה לנסות להכניס את הספריה בשלב מסויים ל־Boost, כך ששינוי הרישיון היה מתוכנן בכל מקרה.
  2. אני מקווה שזה ירחיב את כמות המשתמשים והתורמים לפרויקט ויתן פרסום ודחיפה נוספים ל־CppCMS.

כדי למנוע אי הבנות: CppCMS עדיין משוחרר תחת LGPLv3 וזה לא עומד להשתנות.

העמוד הבא

העמוד הבא

דפים

נושאים