SQL Server 2005 و SQL Server 2007 قابلیت رمز نگاری اطلاعات را برای مقابله با حمله Hacker ها ارایه می کنند. ممکن است Hacker ها توانایی نفوذ کردن به دیتابیس و Table ها را داشته باشند، اما به علت رمزنگاری اطلاعات، آنها قادر نخواهند بود که از اطلاعات سردربیاورند یا از آنها استفاده کنند. امروزه، رمزنگاری اطلاعات مهم در هنگام ذخیره در دیتابیس یا تبادل آنها بین سرور و کلاینت به موضوعی ضروری و اجتناب ناپذیر بدل شده است.
مراتب رمزنگاری به سه مرحله ختم می شوند. این سه مرحله مکانیزم های مختلفی را برای امن نمودن اطلاعات درون شبکه ها و سرورهای محلی به کار می گیرند. مراحل مختلف رمزنگاری توانایی اجرای سرویس های جداگانه را روی یک سرور مقدور می سازد.
Windows Level: بالاترین مرحله- از Windows DP API برای رمزنگاری استفاده می کند.
SQL Server Level: مرحله میانی- از Services Master Key برای رمزنگاری استفاده می کند.
Database Level: مرحله پایینی- از Database Master Key برای رمزنگاری استفاده می کند.
اینها دو نوع از Key هایی هستند که برای رمزنگاری استفاده می شوند:
Symmetric Key: در این سیستم رمزنگاری، فرستنده و گیرنده یک پیام، از یک کلید مشترک و یکتا برای رمزنگاری کردن و از رمزنگاری درآوردن اطلاعات استفاده می کنند. پیاده سازی این نوع رمزنگاری ساده بوده و هم فرستنده و هم گیرنده توانایی رمزنگاری کردن، از رمزنگاری درآوردن تمام پیام ها را دارا می باشند.
Asymmetric Key: این سیستم که با نام رمزنگاری Public-key نیز شناخته می شود، سیستمی است که فرستنده و گیرنده پیام هرکدام یک زوج از کلید را دارا می باشند. که به این زوج Private Key و Public Key گفته می شود.این سیستم پیچیده به نحوی است که فرستنده توانایی دارد تا با استفاده از کلید خودش اطلاعات را رمزنگاری کند ولی نتواند آن ها را از رمزنگاری درآورد. گیرنده نیز، توانایی دارد تا با استفاده از کلید خودش پیام را از رمزنگاری درآورد ولی نمی تواند پیام خام را رمزنگاری نماید. این پیچیدگی این نوع رمزنگاری را به یک پروسه resource-intensive مبدل کرده است.
این اطلاعات رو برات از
اینجا ترجمه کردم.
من یه قسمتی از این مقاله رو ترجمه کردم، توی خود مقاله، هم مثال داره هم توضیحات بیشتری رو در ادامه داده.
اگه خودمم بخوام برات یه توضیح کاربردی تر بدم، باید یه مثال بزنم:
فرض کن یک تابع داریم که کارش رمزنگاری اطلاعات هست، یعنی هرچیزی رو بهش بدیم اون برامون رمز میکنه! این تابع دو تا ورودی می گیره: یکی متنی هست که می خوایم رمز بشه، و دیگری یه عدد مثلاً 8 کاراکتری، که بهش می گن کلید.
این کلید توی این تابع استفاده می شه تا بتونه متن ما رو رمز کنه
مثلاً اگه به تابع کلمه "سلام" و کلید "12345678" رو بدی تابع بهت (مثلاً) این خروجی رو می ده: "س8نذنینمغحبرئ405نمئ"
ولی حالا اگه به تابع همون کلمه "سلام" رو بدی ولی این بار کلید رو عوض کنی و بهش "87654321" رو بدی، دیگه تابع بهت همون خروجی قبل رو نمی ده و یه خروجی جدید می ده.
حالا یه تابع دیگه ای باید وجود داشته باشه که بهش این کلید رو بدیم و متن رمز شده رو هم بدیم و اون به ما متن غیررمز رو بده! پس اگه به این تابع دومی، من "س8نذنینمغحبرئ405نمئ" و "12345678" رو بدم بهم "سلام" رو برمیگردونه.
یه نکته کوچولویی این وسط وجود داشت و اون این بود که با همون کلیدی که من باهاش متنم رو رمز کردم با همون کلید هم اون رو از رمز درآوردم! به این رمزنگاری که "کلید رمز کردن" با "کلید از رمز درآوردن" یکی هستش می گن: Symmetric key
یه حالت دیگه هم به نام Asymmetric key وجود داره، که کلید ها دیگه یکی نیستن، که اگه خواستی بگو تا اون رو هم توضیح بدم