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

إخفاء نص داخل صورة Steganography

بدأه mr.beshoy في 8 ديسمبر 2009 · 10 رد · 10,849 مشاهدة · في الرياضيات والخوارزميات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سلام للجميع

---------------

ال steganography هو علم إخفاء النصوص داخل صور - فديو - اوديو

قرأت عن أول الجورزم و هو ال LSB

(least significant bit)

و لكن وجدت منه أنواع متعددة عاوز أعرف الفرق بينهم :

1-empeding process

2-empeding process with generate random sequence key

3-Quantization and dithering

شكراً

#2

ما هو المرجع الذي تدرس عليه.

عموما ال steganography ليست فقط لنصوص وانما بشكل عام اخفاء بيانات داخل بيانات اخرى. مثلا نص او صورة او غير ذلك يتم الاخفاء عادة داخل الصور او ملفات الفيديو او الصوت لعدم تأثرها بهذه العمليه بشكل واضح.

بعض الافكار المستخدمة :

اضافات البيانات في البتات الغير مهمه

اضافة البيانات على شكل شوائب noise

مثال جميل مشروح باستخدام ماتلاب لاخفاء صورة داخل صوره

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#3

أنا مبدئياً بقرأ من هذا الملف

و بشتغل على الجورزم LSB بشكل مبدأى أيضاً

فى بداية هذا الملف تعرض لنوعين من ال LSB

النوع الاول بيدخل النص من بداية ال cover

أما النوع التانى بيدخله عشوائيا

انا مش مستوعب فكرة التانى

ممكن لو تعرفه قولى على الفكرة العامة للالجورزم التانى

شكرا

Petitcolas035-ch03.rar

#4

حسب الملف المرفق يتم الاتفاق على المصطلحات التاليه (يجب ان تكون واضحة حتى تفهم الموضوع):

================

cover

البيانات التي سنخفي الرسالة السرية فيها. قد تكون هذه البيانات صورة او ملف صوتي او ما شابه

يتم تمثيلها بمصفوفة ذات بعد واحد

l( C ) : length of c :

طول ال cover: عدد خلايا المصفوفة الاحادية

مثلا لوكان الcover عبارة عن صورة (الصورة عبارة عن مصفوفة ذات بعدين) يتم تحويلها الى مصفوفة ذات بعد واحد عناصر هذه المصفوفة هي قيمة اللون عند كل نقطة في الصوره. مثلا: اذا كان اللون لاول بكسل في الصورة اسود سيكون لدينا c(1)=0 . كل عنصر في المصفوفة سندعوه Ci حيث i هو ترتيب العنصر في المصفوفه

قد نحتاج لعملية scrambling لخبطة عناصر المصفوفة اي نضع عنصر معين مكان عنصر . في هذه الحالة يجب الحفاظ على الترتيب القديم يمكن استخدام متغير j لذلك

مثلا العنصر الخامس وضعناه مكان الثالث سيكون لدينا j(3)=5

===============

k عبارة عن مفتاح التشفير وهو قيمة او اكثر تختلف حسب الطريقة المستخدمه.

===============

m : secrete message

الرسالة السرية المطلوب اخفائها. قد تكون نص او صورة او غيره. ايضا يتم تمثيلها بمصفوفة ذات بعد عناصرها بيانات الرسالة (حروف، قيم الوان ، ...الخ)

l(m): length of m

طول الرسالة اي عدد خلايا المصفوفه.

===============

عندما يكون ال cover عبارة عن صورة قد نكتب C(x,y)=10 وهذا معناه ان قيمة اللون للبكسل الذي احداثياته x و y هي 10

للموضوع بقية...

اذا يوجد اي شيء غير واضح في ما سبق الرجاء الاستفسار، قبل ان استمر

تم تعديل هذه المشاركة بواسطة ibr_exn في 9 ديسمبر 2009 في 21:23

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#5

أولاً : مشكور لهذا العمل .

ثانياً : لدى تسولات عن :

اقتباس
لوكان الcover عبارة عن صورة (الصورة عبارة عن مصفوفة ذات بعدين) يتم تحويلها الى مصفوفة ذات بعد واحد عناصر هذه المصفوفة هي قيمة اللون عند كل نقطة في الصوره. مثلا: اذا كان اللون لاول بكسل في الصورة اسود

ما هما ابعدين ؟؟ و تقول أيضاً اول بكسل لونه أسود و من المعورف أن الصورة تتكون من RGB أحمر أزرق أخضر ( حسب علمى )

اقتباس

k عبارة عن مفتاح التشفير وهو قيمة او اكثر تختلف حسب الطريقة المستخدم

لم أستطع فهم الغرض من ال k إلى الان ؟

و أيضأ ما أريد فهمه الطريقتين المذكورتين عن ال LSB و الفرق بينهم

حتى أسنطيع تطبيقهم

شكراً

تم تعديل هذه المشاركة بواسطة mr.beshoy في 9 ديسمبر 2009 في 22:18

#6

الفكرة العامة لعملية اخفاء البيانات بطريقة الLSB :

1. يتم اختيار مجموعة عناصر من الcover عددها يساوي عدد عناصر الرسالة السريه

2. يتم استبدال العناصر التي تم اختيارها بعناصر الرسالة السرية (يتم ادخال عنصر الرسالة السرية في البت الاخير لعنصر ال cover)

تختلف الخوارزميات حسب طريقة الاختيار للعناصر في الخطوة 1. المهم ان نعرف ماهي العناصر التي تم اختيارها حتى نستخرج الرسالة السرية من الcover لاحقا.

ساقوم الان بتوضيح الخوارزمية الاولى :

اقتباس

Algorithm 3.1

for i=1 to l( c ) do

S(i)=C(i);

end for

// اعتقد حتى نحافظ على البيانات الاصلية يتم العمل على نسخة منها وتطبيق الخوارزمية على النسخه

for i=1 to l( m ) do

compute index j(i) where to store ith message bit

//توجد عدة طرق لذلك سنتطرق لها لاحقا

swap LSB of (S(i),m(i))

//تبديل البت الاخير للcover بالبت الموجود في الرساله

end for

تم تعديل هذه المشاركة بواسطة ibr_exn في 9 ديسمبر 2009 في 22:30

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#7

بخصوص استفساراتك :

اقتباس
ما هما ابعدين ؟؟ و تقول أيضاً اول بكسل لونه أسود و من المعورف أن الصورة تتكون من RGB أحمر أزرق أخضر ( حسب علمى )

مثلا :

المصفوفة التالية عبارة عن مصفوفة ذات بعدين اي لها صفوف واعمده (عدد الصفوف =2 وعدد الاعمدة =3)

11 12 13

21 22 23

تم تحويل المصفوفة السابقة الى المصفوفة التالية التي عبارة عن مصفوفة ذات بعد واحد (صف او عمود)

11 12 13 21 22 23

الصور انواع يوجد مثلا الصورة الثنائيه binary عناصرها عبارة عن ابيض =1 او اسود =0 . الصور الملونة من نوع RGB يمكن ان نعبر عن الثلاث القيم بقيمة واحدة طولها مجموع طول الثلاث القيم. مثلا اذا كانت لدينا القيم التاليه :

r=100 و g=50 و b=250 يمكن كتابتهم كالتالي 100050250 كعدد واحد

يجب ان تستوعب اننا سنتعامل مع بتات مثلا: القيمة 5 ستتحول الى عدد ثنائي 101 ، وسيختلف التمثيل حسب نوع البيانات للعنصر

مثلا اذا كنا نتعامل مع نوع بينات بطول 8 بتات سيكون تمثيلها 00000101

اقتباس
لم أستطع فهم الغرض من ال k إلى الان ؟

مثلا قد يكون الk عبارة عن ال seed الذي يعطي اعداد عشوائيه فاذا عرفناه يمكننا توليد نفس مجموعة الاعداد العشوائية اثناء عملية استخراج الرسالة السريه.

ان شاء الله سيتضح في المثال القادم.

هل اطلعت على المثال الخاص بالماتلاب ؟

مراجع مفيده اخرى :

موقع مفيد

برنامج مفتوح المصدر

1

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#8

اولاً : شكراً على ردك ..

ثانياً : ليس لدى خبرة بالمتلاب للأسف ..

ثالثاً : أنت تقول :

اقتباس
2. يتم استبدال العناصر التي تم اختيارها بعناصر الرسالة السرية (يتم ادخال عنصر الرسالة السرية في البت الاخير لعنصر ال cover)

يعنى لو عندى رسالة مثل هذه : Algorithm أريد إدخالها

همسك الحرف A أدخله فى آخر أول بت فى ال cover C(1 )

و الحرف l فى آخر ثانى بت إلى آخر الرسالة

كما تقول ؟؟؟

ولو فعلا كده ايه شكل أول بت ؟؟؟

شكراً

#9

اسف للتأخير.

اقتباس
ليس لدى خبرة بالمتلاب للأسف

الماتلاب يمكن تعلم اساسياته في بضعة ساعات اذا كنت تبرمج باي لغة برمجة اخرى. انصح بقراءة اول ثلاثة فصول من كتاب Digital Image Processing Using Matlab. الجميل فيه احتوائه لمعظم الدوال الخاصة بالتعامل بالصور وغيرها وباسلوب سهل.

اقتباس
عنى لو عندى رسالة مثل هذه

لماذا نضع الرسالة في البت الاخير؟ لانه لن يؤثر كثيرا على قيمة اللون.

فمثلا لو كانت قيمة اللون هي 255 = 11111111 اذا غيرنا قيمة البت الاخير (بدلا من واحد يصبح صفر) ستصبح القيمة الجديده 254=11111110وهي كما ترى لن تؤثر على قيمة اللون بشكل كبير.

لو فرضا عندي الCover عبارة عن صورة تم تحويلها الى مصفوفة احادية. ولو فرضا سنقوم بادخال احرف الرسالة السرية بالترتيب

1. سناخذ احرف الرسالة السرية ونحولها الى مصفوفة احاديه. كل حرف سيكون عبارة عن مجموعة من الخلايا مثلا الاسكي الخاص بالحرف.

A=65=1000001

l=108=1101100

g=103=1100111

.

.

.

وهكذا.

سيكون شكل المصفوفة الاحادية للرسالة السريه:

100000111011001100111....and so on

2. الان بكل بساطة يتم اخذ اول قيمة من الCover ثم تحويلها الى النظام الثنائي ووضع اول قيمة في مصفوفة الرسالة مكان اول بت من اليمين وهكذا حتى تكتمل جميع عناصر الرساله.

3. لفك الرسالة نستخدم الطريقة العكسية اي ناخذ اول بت من كل قيمة ونجمعهم في مصفوفة ومن ثم نحولها من النظام الثنائي الى النظام العشري (مثلا في الطريقة السابقة كل 7 بتات تمثل رقم عشري)

تم تعديل هذه المشاركة بواسطة ibr_exn في 23 ديسمبر 2009 في 23:18

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#10

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

الحل :

هي توزيع عناصر الرسالة السرية على الCover بطريقة عشوائيه بدلا من استبدال القيم بالترتيب.الطريقة الاشهر لذلك هي :

Random Interval Method

فكرتها تعتمد على ان يكون المرسل والمستقبل لديهم Key مفتاح معين (عدد) يتم الاتفاق عليه.بحيث يتم استخدام هذا العدد كنواة seed لتوليد مجموعة اعداد عشوائيه. (معرفة ال Seed يسمح بتوليد نفس مجموعة الاعداد العشوائية اكثر من مرة) عدد هذه الاعداد العشوائيه هو نفس عدد عناصر الرسالة السرية ومداها يكون ضمن مدى ابعاد الCover

. يتم استخدام مجموعة الاعداد العشوائيه هذه ك فهرسة للخلايا التي سيتم التغيير فيها (اي ان هذه الخلايا دون غيرها هي التي ستحمل الرسالة السرية ).

مثال بسيط :

لو كانت لدينا الرسالة السريه :

SM=1,3,10,26

والصورة التي سيتم وضع الرسالة فيها :

Cover=10,20,33,25,60,67

و مجموعة الاعداد العشوائيه:

ٍٍSS=1,3,5,6

معنى ذلك ان الرسالة سيتم وضعها في القيم

10و33و60و67

تم تعديل هذه المشاركة بواسطة ibr_exn في 23 ديسمبر 2009 في 23:32

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#11

الطريقة الثالثه :

Pseudorandom Permutations

ما عيب الطريقة السابقة؟ صحيح، امكانية حدوث تكرار في مجموعة الاعداد التي تم توليدها وبالتالي الكتابة على نفس المكان اكثر من مرة وضياع جزء من الرسالة السريه.

حل مقترح هو قبل الكتابة التأكد من عدم التكرار و اخذ القيمة التاليه. حل افضل هو استخدام Pseudorandom Permutations هذه الطريقة تقوم على التالي:

v= i div X

u= i mod X

v=v+hk1(u)) mod Y

u=v+hk2(v)) mod X

v=v+hk3(u)) mod Y

ji=v X + u

حيث :

hk عبارة عن دالة هاش (لدينا ثلاث دوال مختلفة كل دالة تختص بمفتاح معين) .

لدينا ثلاثة مفاتيح k1,k2,k3

X هو احداثي ال x للعنصر الحالي

Y هو احداثي ال y للعنصر الحالي

عيب هذه الطريقة انها تحتاج وقت طويل للحساب.

ملحوظة: تم اقتراح طرق ابسط واسرع لتوليد قيم عشوائية غير متكرره في هذا القسم (استخدم خاصية البحث في المنتدى) يمكن استخدامها بدلا عن هذه الطريقه.

سأتوقف هنا، على ان يقوم صاحب السؤال بشرح طريقة او اكثر من الطرق المتبقيه :ph34r: .

تم تعديل هذه المشاركة بواسطة ibr_exn في 23 ديسمبر 2009 في 23:57

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

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