رمزنگاری با استفاده از گواهینامه

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

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

در رمزنگاری به شیوه کلید نامتقارن از دو کلید استفاده می‌شود : اولی یک کلید خصوصی است که بصورت محلی ذخیره شده و نباید فاش شود و دومی ‌یک کلید عمومی‌است که در اختیار همگان قرار دارد. داده رمزنگاری شده توسط کلید عمومی‌فقط توسط کلید عمومی‌ متناظر با خود قابل رویت است و برعکس. به عنوان مثال فرض کنید برای ارسال نامه‌های فوقِ سری به یک شخص بسیار مهم ، به هر فرد موجود در جامعه یک صندوق به همراه یک قفل داده شده است. تمامی ‌این قفل‌ها یکسانند(کلید عمومی). افراد پس از قرار دادن نامه‌ها در صندوق ، آن‌ها را به شخص مهم تحویل می‌دهند. کلید این قفل‌های یکسان تنها در اختیار این شخص قرار دارد و تنها اوست که می‌تواند نامه‌ها را مشاهده کند(کلید خصوصی). 
در  این روش به دلیل اینکه کلید خصوصی نباید در شبکه منتقل شود ، مشکلات روش کلید متقارن پیش نمی‌آید.
به دلیل اینکه کلید عمومی‌در اختیار همه است ، هویت افرادی که داده‌ها را رمزنگاری کرده اند قابل تشخیص نیست. برای ایجاد یک ارتباط مطمئن از دو دسته کلید استفاده می‌شود :پیغام را با کلید خصوصی خودمان-که مشخص کننده هویت ما است- رمزنگاری می‌کنیم. سپس پیغام رمزی را با استفاده از کلید عمومی‌دریافت کننده پیغام ، دوباره رمزنگاری می‌کنیم. دریافت کننده می‌تواند با استفاده از کلید خصوصی خود و کلید عمومی‌ ما پیغام را رمزگشایی کند.
با استفاده از این شیوه امنیت به بالاترین حد خود می‌رسد ولی متاسفانه از لحاظ قدرت اجرا بسیار ضعیف است. پس هنگامی ‌که با مقادیر عظیمی ‌از داده‌ها سرو کار داریم این شیوه ناکارامد است. 
با استفاده از دستور  CREATE SYMMETRIC KEY می‌توان یک کلید ناتقارن ساخت که این کار خود به دو صورت انجام می‌پذیرد :
ایجاد کلید نامتقارن با استفاده از الگوریتم : 
عبارت ENCRYPTION BY PASSWORD مشخص کننده کلمه رمزی است که با آن کلید خصوصی رمزنگاری شده است. الگوریتم‌های قابل استفاده در این روش RSA_512 ،  RSA_1024 و RSA_2048 می‌باشند.

CREATE ASYMMETRIC KEY key1
WITH ALGORITHM = RSA_512
ENCRYPTION BY PASSWORD = 'pass'

ایجاد کلید متقارن با استفاده از فایل : می‌توان با استفاده از یک فایل که با استفاده از دستور sn.exe ایجاد می‌شود استفاده کرد.
CREATE ASYMMETRIC KEY key1
FROM FILE = 'C:\Apress\SqlServer2005\SecurityChapter\Encryption\keyfile.key'
ENCRYPTION BY PASSWORD = 'pass'
هر دو تابع EncryptByAsymKey() و DecryptByAsymKey() ، GUID کلید و عبارت رمزنگاری/رمزگشایی شده و کلمه عبور استفاده شده برای رمزنگاری-