رمزنگاری کلید متقارن

بررسی اصول امنیتی پایگاه های داده بخش شانزدهم

 3-10  رمز نگاری  

یکی از اصلی ترین امکاناتی که برای بالا بردن امنیت در SQLServer2005 گنجانده شده است ، رمز نگاری است. در این امکان ، داده‌ها با استفاده از عبارات T-SQL رمز نگاریی می‌شوند و در صورت نیاز رمزگشایی  شده و استفاده می‌شوند. بهتر است قبل از ذخیره کردن داده‌های حساس-مثلا کلمۀ عبور کارت‌های اعتباری- در پایگاه‌داده ، این داده‌ها بصورت رمز درآورده شوند تا در صورت فروپاشی سیستم امنیت پایگاه‌داده ، این داده‌های حساس ، امن باقی بمانند. 
SQLServer2005 چهار جفت از توابع رمز نگار/رمزگشا را ارائه می‌دهد که هر جفت یک  تکنیک خاص برای رمزنگاری را ارائه می‌دهد.
رمزنگاری کلمه عبور (PE) : این شیوه ساده ترین و در عین حال ضعیف ترین شیوه رمزنگاری است. داده‌ها با یک رشته کلمه رمز تعیین شده توسط کاربر رمزنگاری می‌شود و قدرت کلمه عبور انتخاب شده بررسی نمی‌شود.
رمزنگاری کلید نامتقارن  (AKE) : این شیوه قدرتمند ترین نوع رمزنگاری است چرا که از کلید‌های متفاوتی برای انجام عمل رمزنگاری و رمزگشایی استفاده می‌کند. نقطه ضعف این شیوه ، سرعت پایین آن است و در جایی که مقادیر عظیمی ‌از داده وجود دارد کارا نیست. تنها در مواردی که مهمترین موضوع در رابطه با داده‌ها امنیت باشد و کارایی اهمیت کمتری داشته باشد از این شیوه استفاده می‌کنند. مثلا وزارت امنیت ایالات متحده برای امن کردن داده‌های خود از این شیوه استفاده می‌کند. 
رمزنگاری کلید متقارن (SKE) : در این شیوه از یک کلید واحد برای رمزنگاری و رمزگشایی استفاده می‌شود. SQLServer2005 توسط دو دسته از توابع این عمل را انجام می‌دهد. که در دسته اول کلمه رمزی توسط کاربر ارائه می‌شود و در دسته دوم کلمه رمز به عنوان یک منبع در SQLServer ذخیره شده است.
رمزنگاری گواهینامه  (CE) : گواهینامه‌ها برای اثبات درستی هویت نویسندۀ یک کد و یا فرستندۀ یک داده استفاده می‌شود. 
3-10-1  رمزنگاری با استفاده از کلمه عبور کاربر 
این روش هنگامی ‌کارا است که کلمه عبور در سیستم ذخیره نشده ولی یک رشتۀ شناخته شده برای کاربر است. از آنجا که کلمه عبور در سیستم ذخیره نشده است دیگر نگران ذخیرۀ آن در یک مکان امن در سیستم نیستیم و این یکی از مزایای این روش است. برای رمزنگاری با استفاده از این روش از تابع EncryptByPassPhrase() استفاده می‌شود که مقداری را که باید رمزنگاری شود و عبارت عبور را به عنوان پارامتر می‌پذیرد. برای رمزگشایی از تابع DecryptByPassPhrase() عبارت عبور و رمز را به عنوان پارامتر می‌پذیرد.
با مثالی به ادامۀ بحث می‌پردازیم. فرض کنید در پایگاه‌داده university جدولی با عنوان tblStudent وجود دارد. 
مقادیر جدول tblStudent قبل از رمز نگاری 
ش