الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

نقاش حول أفضل طريقة للتعامل مع الـ Encryption Key

بدأه khaled_prg في 27 أغسطس 2014 · 28 رد · 4,163 مشاهدة · في الأخبار والنقاشات التقنية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

 

أعمل الآن على تطبيق Desktop بالجافا يسمح للمستخدم بتسيير و إدارة كلمات المرور (تماما مثل KeePass) أستخدم قاعدة بيانات SQLite لتخزين الـ passwords، هذه الأخيرة يتم تشفيرها قبل تخزينها في الـ DB.

للولوج إلى التطبيق، يقوم المستخدم بإدخال password master الذي من خلاله أقوم بتوليد مفتاح التشفير AES-256-CBC.

سؤالي هو : كيف أتأكد من صحة الـ password master أثناء عملية الـ authentication ؟

 

 

 

تحياتي.

#2

عادة اقوم بتخزين مفتاح تشفير master password في البرنامج في مكان يصعب الوصول إليه في حال قام أحدهم بعمل هندسة عكسية هذه طريقة ربما تنفعني في برامج مصنوعة بالدالفي أو لازريس حيث يصعب عكس الكود ولكن في الجافا فهو سهل بسيط

 

يوجد طريقة أخرى وهي استعمال الهاش إما md5 أو SHA

هذه الطريقة آمنة حتى ولو وصل أحدهم إلى الهاش فهو لا يمكن عكسه

 

بالتوفيق

1

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#3

أهلا أبو عبد البر +1

 

اقتباس

عادة اقوم بتخزين مفتاح تشفير master password في البرنامج في مكان يصعب الوصول إليه

 

تقوم بتخزينه في البرنامج !! كيف ؟

 

اقتباس

 

يوجد طريقة أخرى وهي استعمال الهاش إما md5 أو SHA

هذه الطريقة آمنة حتى ولو وصل أحدهم إلى الهاش فهو لا يمكن عكسه

 

إذا كنت تتحدث عن الهاش الطبيعي (يعني بدون salt) فعملية كسره بسيطة جداً إذا كانت قاعدة البيانات embedded و ليست client-server (كما هو الحال هنا)، كل ما على الـ hacker هو تغيير الهاش و إدخال كلمة المرور الموافقة للهاش الجديد.

إذا كنت تتحدث عن الـ salted hashes فالصعوبة تكمن في كيفية التحقق من الـ encryption key.

تم تعديل هذه المشاركة بواسطة khaled_prg في 27 أغسطس 2014 في 18:56

#4
اقتباس

 

إذا كنت تتحدث عن الهاش الطبيعي (يعني بدون salt) فعملية كسره بسيطة جداً إذا كانت قاعدة البيانات embedded و ليست client-server (كما هو الحال هنا)، كل ما على الـ hacker هو تغيير الهاش و إدخال كلمة المرور الموافقة للهاش الجديد.

هذا إذا كان الهكر يعرف دالة الهاش التي استخدمتها ولكن إذا لم يعرفها فكيف سيغيره ، إليك مثالا للتوضيح

 

لتكن هذه دالة الهاش بلغة الجافا

private String hash(String password)
    {
        
        return SHA-3(md5(SHA-3(md5(SHA−3(password)))));
        
    }

فالهكر لا يعرف كيف يضع هاش جديدا إلا إذا عرف طريقة التشفير

تم تعديل هذه المشاركة بواسطة أحمد أبو عبد البر في 27 أغسطس 2014 في 21:44

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#5

في هذه الحالة، هل أنت متأكد أن علاقة الـ composition بين الـ bijective functions تُولّد بالضرورة دالة bijective ؟؟

تم تعديل هذه المشاركة بواسطة khaled_prg في 27 أغسطس 2014 في 22:15

#6

لم أفهم قصدك

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#8
  • لا يمكنني البرهنة على ذلك رياضيا ولكن أنا على يقين جازم أن لن يحدث أي تصادم بين الهاشات الناتجة عن هذه الدالة

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#10

هذا يعتمد على مدى تعقيد كلمة السر فكلما كانت أكثر تعقيدا كانت احتمالات brute force أكثر

وفي تعقيد مثل هذا Sdfrt14@"#Opôjvhytg41UH"& سيكون احتمال وصول الهكر إلى كلمة السر واحد من ملايير ملايير ملايير ....

 

 

 

 

في الأخير يجب أن تعرف أن الهاش ما هو إلا مُصَعِّب  لعملية الاقتحام العنيف فقد تصل مدة التجريب سنين ولكن تنبه... في وجود السوبر كومبيوتر لدى الحكومات الكبرى  أصبح الكسر أسرع  بملايين ملايين  المرات

تم تعديل هذه المشاركة بواسطة أحمد أبو عبد البر في 28 أغسطس 2014 في 21:15

1

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#11

+1

طيب، لنفترض أن المستخدم أدخل كلمة المرور و تم التأكد منها بنجاح :)

السؤال الموالي الذي يطرح نفسه بإلحاح هو كيف يُمكنني التأكد من أن ملف قاعدة البيانات لم يتعرض للتعديل من قبل أحدهم ؟

 

il s'agit de l'intégrité de la base de données, je ne sais pas comment on l'appelle en arabe

#12

مرة أخرى استعمل  hash  لملف قاعدة البيانات لإنشاء بصمة إلكترونية

 

كلما تقوم بتعديل على قاعدة البيانات هشهش الملف واحفظ الهاش في مكان آمن حتى لا تصل إليه أيدي التخريب والعبث

ثم كلما تسجل دخولك إلى البرنامج هشهش ملف قاعدة البيانات ثم قارن الهاش الناتج بالهاش المحفوظ عندك في مكان آمن

 

على العموم يوجد طريقة أخرى لتأمين embedded database وذلك بإنشاء هارد ديسك افتراضي مشفر ، يوجد أدوات وبرامج تعمل لك ما تريد

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#13
اقتباس

 

يوجد طريقة أخرى لتأمين embedded database وذلك بإنشاء هارد ديسك افتراضي مشفر

هل من تفصيل ؟ علما أنني أريد حلولا تعتمد على تغيير الكود فقط، بدون استخدام أدوات خارجية.

 

اقتباس

 

قارن الهاش الناتج بالهاش المحفوظ عندك في مكان آمن

و أين هو هذا المكان الآمن ؟؟

تم تعديل هذه المشاركة بواسطة khaled_prg في 28 أغسطس 2014 في 14:29

#14
اقتباس

 

علما أنني أريد حلولا تعتمد على تغيير الكود فقط، بدون استخدام أدوات خارجية

إذاً انس الأمر

 

اقتباس

 

و أين هو هذا المكان الآمن ؟؟

 

 

لو كنت على اللينكس فسيكون الجواب سهلا واما على نظام النوافذ فالمكان الآمن سيكون بالتاكيد خارج جهاز الكمبيوتر وليكن مثلا فلاش ديسك

تم تعديل هذه المشاركة بواسطة أحمد أبو عبد البر في 28 أغسطس 2014 في 14:46

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#15
اقتباس

 

اما على نظام النوافذ فالمكان الآمن سيكون بالتاكيد خارج جهاز الكمبيوتر وليكن مثلا فلاش ديسك

En faisant ceci, l'application perdrait absolument sa portabilité puisque si l'utilisateur voudrait accéder à sa base, il devrait avoir une clé USB !!l

#16

ملاحظة : استعمل اللغة العربية ما استطعت ^_^

 

انا أعطيتك مثالا إذ يمكن ان تخزن ملف الهاش في السحابة كمثال آخر، المهم دبر حالك

 

وعلى كل حال هذا الملف ليس اساسي في عمل البرنامج وإنما هو للتأكد فقط من أن قاعدة البيانات لم تصلها أيدي العبث

1

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#17

+1

أشكرك على المتابعة.

 

بالنسبة لتخزين الهاش، برنامج KeePass مثلا يُمكنه معرفة ما إذا كانت قاعدة البيانات قد تعرضت للتعديل أم لا دون أن يطلب منك تخزين الهاش.

هل لديك و لو فكرة تخمينية عن التقنية التي يستخدمها للتحقق من سلامة و تكامل قاعدة البيانات ؟

#18

معرفة هل هذا الشيء تم تعديله أم لا   ،  لا تتم إلا بالمقارنة مع صفة الشيء من قبل كيف كانت ...هذا أمر منطقي

 

أنت لو رايت صديقا لك وقلت له قد تغيرت فذلك لأنك قارنت صورته الآن بصورته المخزنة في دماغك فوجدت التغيير

 

الآن هذا البرنامج لم أطلع على كيفية عمله ولكن هو بالتأكيد سيستعمل طريقة الحفظ والمقارنة لكي يعرف هل حدث تغيير على قاعدة البيانات ، ربما لم يطلب منك ذلك ولكن هو بالتأكيد يقوم بذلك بطرقة خفية

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#20

مرحبا وأهلا وسهلا

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#21

تذكرت موضوعا مثل موضوعك

هل بلإمكان وضع كلمة مرور لقاعدة بيانات SQLite ؟

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#23

جرب هذا https://github.com/sjlombardo/sqlitejdbc

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#25

هذه النسخة من JDBC تدعم الاتصال ب SQLCipher

 

انظر إلى  ملف الاختبار في نفس المشروع https://github.com/sjlombardo/sqlitejdbc/blob/master/src/test/ConnectionTest.java

 

انظر إلى القطعة منه

 @Test public void sqlCipherTest() throws SQLException {
File testdb = new File("cipher.db");
if (testdb.exists()) testdb.delete();
Connection conn = DriverManager.getConnection("jdbc:sqlite:cipher.db");
PreparedStatement prep = conn.prepareStatement("pragma key='123';");
prep.executeUpdate();
prep.close();
prep = conn.prepareStatement("create table foo (bar integer);");
prep.executeUpdate();
prep.close();
prep = conn.prepareStatement("insert into foo (bar) values (1);");
prep.executeUpdate();
prep.close();
conn.close();
conn = DriverManager.getConnection("jdbc:sqlite:cipher.db");
ResultSet rs = null;
try {
prep = conn.prepareStatement("select bar from foo");
rs = prep.executeQuery();
assertTrue(false);
}
catch (java.sql.SQLException e)
{
prep.close();
assertTrue(true);
}
conn = DriverManager.getConnection("jdbc:sqlite:cipher.db");
prep = conn.prepareStatement("pragma key='123';");
prep.executeUpdate();
prep.close();
prep = conn.prepareStatement("select bar from foo");
rs = prep.executeQuery();
assertTrue(rs.next());
assertEquals(rs.getInt(1), 1);
prep.close();
conn.close();
}

تم تعديل هذه المشاركة بواسطة أحمد أبو عبد البر في 29 أغسطس 2014 في 12:35

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

مواضيع مشابهة