ایجاد امنیت صفحات وب با استفاده از AES و SAML

در این مقاله با مفاهیم امنیت در حوزه وب آشنا خواهیم شد و پروتکل ها و روش های گوناگونی که برای این کار موجود است را بررسی می کنیم.در انتهای مقاله ،یک برنامه برای فهم بیشتر مطالب و آشنایی با کارکرد پروتکل ها قرار داده شده است.

ایجاد امنیت صفحات وب با استفاده از AES و SAML

رمزنگاری

مساله ی مهم در دنیای وب ، امنیت است، به خاطر این که میلیون ها داده ی حساس و مهم در حال انتقال و نگهداری بر روی وب سایت ها هستند،  و همین مساله، امنیت را برای ما بسیار مهم و حیاتی می کند، بنابراین ما باید سیستم امنی را برای محافظت از این داده ها فراهم کنیم. محبوب ترین و کاربردی ترین راه برای ایجاد یک اتصال امن در وب ، استفاده از تکنیک های رمزنگاری است. تکنیک های رمزنگاری شامل فرآیندهای رمزنگاری و سپس رمزگشایی داده ها برای ارتقای امنیت آن ها است. به عنوان مثال ، در شکل زیر Bob می خواهد پیامی را به Alice بفرستد. اطلاعات به عنوان "پیام" (Message) شناخته می شود و شامل یک پارامتر ورودی  برای فرآیند رمزنگاری است. سپس یک کلید مشخص و یک تابع رمزنگاری به پیام اضافه خواهند شد و متن رمزنگاری شده (cipher text) تولید می شود. این پیام در طول شبکه منتقل می شود ، یعنی دقیقا جایی که هکرها منتظر هستند تا پیام ما را سرقت کنند.

در سوی دیگر ، Alice  منتظر است تا پیام Bob  را دریافت کند و همچنین یک تابع رمزگشایی در اختیار دارد که از کلید مشابه (کلید مشابه با کلید رمزنگاری) برای رمزگشایی پیام استفاده می کند. تابع رمزگشایی به همراه کلیدی که در اختیار Alice  قرار دارد ، پیام را برای Alice  رمزگشایی خواهند کرد و در نهایت Alice  می تواند پیام Bob  را متوجه شود. این فرآیند به عنوان رمزنگاری متقارن ( Symmetric Encryption )شناخته می شود.

مهم ترین مساله در این فرآیند ، تولید یک کلید پیچیده و قدرتمند است. زیرا الگوریتم های رمزنگاری و رمزگشایی در اینترنت موجود هستند و از مراحل و توابع مشابهی برای رمزنگاری اطلاعات استفاده می کنند و همچنین تغییر دادن این الگوریتم ها نیز کاری بی فایده محسوب می شود زیرا هکرها به سادگی می توانند الگوریتم را پیدا کنند. بنابراین ما باید بر روی تولید یک کلید خصوصی قدرتمند تمرکز کنیم تا به این وسیله بتوانیم داده های محرمانه را ، امن نگه داریم.

رمزنگاری یک ابزار قدرتمند و عالی برای هر مساله ی امنیتی است.

اما رمزنگاری برای یک کاربر بی تجربه مناسب نیست زیرا ممکن است به  سادگی توسط هکرها (مخصوصا هکرهای اجتماعی) مورد سواستفاده قرار بگیرد.

رمزنگاری نیازمند به کارگیری خلاقیت و ابتکار است ، زیرا به کار گیری سیستم های قدیمی رمزنگاری ، ضرری مشابه با استفاده نکردن از روش های رمزنگاری در پی دارد.

اگر رمزنگاری به صورت نادرست پیاده سازی شود ، نباید انتظار داشته باشید که نیازهایتان به صورت کامل برطرف شود.

برخی از راه حل های ارتباطی امن عبارتند از :

- Web Traffic: HTTPS -> Secure Socket Layer (SSL/TLS)

2- Wireless Traffic: GSM: 802.11 Or WPA2: Bluetooth

3- فایل رمزنگاری شده بر روی Disk

استاندارد رمزنگاری پیشرفته (AES)

AES یکی از تکنیک های رمزنگاری است که از کلید مشابه استفاده می کند و در دسته ی الگوریتم های رمزنگاری Rijndael  قرار دارد. AES بر پایه ی توابع" جایگزینی"و" تغییر اساسی " کار می کند و از راه های پیچیده ای برای تولید کلید های قدرتمند و تقریبا غیر قابل شکستن استفاده می کند . تولید کلید هایی که احتمال شکسته شدن آن ها پایین و یا صفر باشد، هدف ما است تا به این وسیله بتوانیم اطلاعات حساس مان را در طول شبکه منتقل کنیم .

در مرحله اول ، AES کلید را تا طول 128 بیت گسترش می دهد و این کار را تا تولید 10 کلید ادامه می دهد که هر کدام از این کلید ها 128 بیت ، طول دارند. تعداد کلیدهای تولید شده چرخه های متعددی را می سازد .پیام به عنوان پارامتر ورودی با این کلید ها ترکیب می شود. AES فقط از تابع “AddRoundKey” در K0 استفاده می کند و در Kn   از “SubBytes” ، “Shiftrows” ، “AddRoundKey” استفاده می کند و AES برای K2 تا Kn-1  از همه ی چهار تابع “AddRoundKey”, “SubBytes”, “Shiftrows” و AddRoundKey” استفاده می کند. در نهایت پیام یا متن ساده این توابع پیچیده را طی می کند و به یک پیام رمزنگاری شده و یا به اصطلاح cipher text تبدیل می شود.

AES این الگو را به صورت برعکس اجرا می کند تا همان پیام را بتواند از متن رمزنگاری شده استخراج کند. AES پیام های متنی و کلید ها را به صورت ماتریس های 4*4  در می آورد، زیرا کار کردن با ماتریس ها ساده تر از کار کردن با فرم های معمولی است . تصویر زیر چگونگی کارکرد AES  را نشان می دهد.

AddRoundKey :

این تابع ، Ki,j و Mi,j را با تابع XOR ترکیب می کند . این گفته به این معناست که AES سطر I  و ستون j  را از ماتریس های مربوط به پیام و کلید برمی دارد و عملیات XOR را برای همه ی سطرها و ستون های مجاور انجام می دهد و در نهایت Ci,j تولید می کند. در تصویر زیر ، عملیات XOR  بر روی کلید آبی و پیام قرمزرنگ انجام می شود تا متن رمزنگاری شده به رنگ نارنجی ایجاد شود .

SubBytes :

این تابع جایگزینی برای Mi,j از جدول substitution (جایگزینی) با یک الگو و یک سری مراحل خاص پیدا می کند و ماتریس جدید را به نام M~i,j ذخیره می کند . این گفته به این معناست که AES ، سطر i و ستون j از پیام را برمیدارد و بر روی همه ی سطر ها و ستون ها، عملیات جایگزینی انجام می دهد و در نهایت ماتریس رمزنگاری شده ایجاد می کند.

MixColumns :

در این تابع ، یک ماتریس ثابت به نام C داریم که حاصل نهایی کار در آن قرار می گیرد. در مرحله اول ، سطر اول بدون هیچ تغییری در C قرار می گیرد . سطر دوم ابتدا یک واحد به سمت چپ شیفت داده می شود و سپس سطر سوم یک واحد به سمت چپ شیفت داده می شود و سپس بر روی آن عملیات XOR  انجام می شود .

Shift Rows :

این تابع ، ماتریس پیام را برمیدارد ، سطر اول را تغییر نمیدهد. برای سطر دوم یک واحد همه ی درایه ها را به سمت چپ شیفت می دهد و برای سطر سوم ، دو سلول به سمت چپ شیفت می دهد و برای سطر سوم سه سلول به سمت چپ شیفت می دهد.

در تصویر زیر می توانید نمایی عمیق تر از عملیاتی که داخل AES اتفاق می افتد را ببینید. الگوریتم هایی به نام های DES و 3DES نیز وجود دارند که تقریبا مشابه AES هستند ، مورد استثنا در بین آن ها 3DES که 168 بیت است و تعداد بیت های بیشتری نسبت به AES دارد. اما فقط از تابع جایگزینی (جایگشت) برای تولید کلید استفاده می کند در حالی که AES از دو تابع " جایگزینی"و" تغییر اساسی " استفاده می کند و زمان کمتری نسبت به 3DES می گیرد.

راه حل برای داشتن امنیت بیشتر بر روی وب

 می خواهیم یک راه حل ارائه کنیم که شامل قسمت های تصدیق هویت و مجوزدهی برای شناسایی کاربران نیز باشد. تصدیق هویت (Authentication) برای ما این امکان را فراهم می کند تا با استفاده از username (نام کاربری) و password (رمزعبور) بفهمیم ادعای کاربر در رابطه با هویتش درست است یا خیر. یک راه حل وجود دارد که این قسمت را به دو بخش verification تقسیم کنیم، اولین بخش با استفاده از password انجام بگیرد و بخش دوم با استفاده از biometric signs (نشانه های بیومتریک) . در این حالت اگر شخصی رمز عبور یک کاربر را سرقت کند، نمی توانند به پروفایل شخصی آن کاربر وارد شوند.(زیرا علاوه بر رمز عبور، نیاز به نشانه های بیومتریک نیز هست.)

بخش بعدی مجوز دهی است که به مدیریت دسترسی ها مربوط است و مشخص می کند که هر یک از نقش (Role) های خاصی که داریم می توانند به کدام بخش ها دسترسی داشته باشند .به عنوان مثال ، در اینجا (در یک EHealth Care System) دکتر اجازه دارد به اطلاعات مربوط به سلامتی بیمار دسترسی داشته باشد و EHR را بخواند یا بنویسد.

بخش سوم ، تکنیک های رمزنگاری است (AES) . همان طور که در ابتدای متن نیز اشاره کردیم، AES از تکنیک های متعددی برای رمزنگاری داده ها استفاده می کند. بنابراین داده ها در پایگاه داده می توانند به صورت متن رمزنگاری شده ذخیره شوند تا ضریب امنیتی را افزایش بدهند.

مرور بیشتر بر راه حل ارائه شده

راه حل ، استفاده از یک biometric sign است که آن را با کلید مخفی ما ترکیب کند تا بتواند یک کلید قوی تر و با ضریب امنیتی بالاتر در AES تولید کند. این کلید biometric می تواند به وسیله ی fingerprint (اثر انگشت)و یا علائم قرنیه مورد استفاده قرار بگیرد. امروزه به دست آوردن fingerprint (اثر انگشت) به وسیله تلفن همراه هایی مثل iPhone امکان پذیر است و این اطلاعات می توانند به عنوان یک ماتریس دوم ذخیره شوند و با کلید موردنظرمان ترکیب شوند تا یک کلید امن تر تولید شود. این علائم همواره در دسترس ما هستند و ما آن ها را هرگز فراموش نمی کنیم و هکرها نمی توانند به آن ها دست پیدا کنند ، بنابراین راه حل مناسبی برای حفظ اطلاعات خصوصی است.

چگونه کد ها را در برنامه پیاده سازی کنیم ؟

ابتدا visual studio 2013 را باز کنید و یک پروژه جدید ASP.NET MVC ایجاد کنید ، گزینه ی Empty را انتخاب کنید. سپس یک Controller جدید ایجاد کنید.

using System;  
using System.Collections.Generic;  
using System.IO;  
using System.Linq;  
using System.Security.Cryptography;  
using System.Text;  
using System.Web;  
using System.Web.Mvc;  
  
namespace WebSecurity.Controllers  
{  
    public class AESController : Controller  
    {  
        //  
        // GET: /AES/  
  
        public ActionResult Index()  
        {  
  
            ViewData["Encrypted"] = TempData["TEncrypted"];  
            ViewData["Decrypted"] = TempData["TDecrypted"];  
            return View();  
        }  
  
        //txtforEN is PlainText  
        //Key is Public Secret Key   
        [HttpPost]  
        public ActionResult Encryption(string Text, string Key)  
        {  
            // Convert String to Byte  
  
            byte[] MsgBytes = Encoding.UTF8.GetBytes(Text);  
            byte[] KeyBytes = Encoding.UTF8.GetBytes(Key);  
  
            // Hash the password with SHA256  
            //Secure Hash Algorithm  
            //Operation And, Xor, Rot,Add (mod 232),Or, Shr  
            //block size 1024  
            //Rounds 80  
            //rotation operator , rotates point1 to point2 by theta1=> p2=rot(t1)p1  
            //SHR shift to right  
            KeyBytes = SHA256.Create().ComputeHash(KeyBytes);  
  
            byte[] bytesEncrypted = AES_Encryption(MsgBytes, KeyBytes);  
  
            string encryptionText = Convert.ToBase64String(bytesEncrypted);  
  
  
  
            TempData["TEncrypted"] = encryptionText;  
            return RedirectToAction("Index");  
        }  
  
        public byte[] AES_Encryption(byte[] Msg, byte[] Key)  
        {  
            byte[] encryptedBytes = null;  
  
            //salt is generated randomly as an additional number to hash password or message in order o dictionary attack  
            //against pre computed rainbow table  
            //dictionary attack is a systematic way to test all of possibilities words in dictionary wheather or not is true?  
            //to find decryption key  
            //rainbow table is precomputed key for cracking password  
            // Set your salt here, change it to meet your flavor:  
            // The salt bytes must be at least 8 bytes.  == 16 bits  
            byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };  
  
            using (MemoryStream ms = new MemoryStream())  
            {  
                using (RijndaelManaged AES = new RijndaelManaged())  
                {  
                    AES.KeySize = 256;  
                    AES.BlockSize = 128;  
  
                    var key = new Rfc2898DeriveBytes(Key, saltBytes, 1000);  
                    AES.Key = key.GetBytes(AES.KeySize / 8);  
                    AES.IV = key.GetBytes(AES.BlockSize / 8);  
  
                    AES.Mode = CipherMode.CBC;  
  
                    using (var cs = new CryptoStream(ms, AES.CreateEncryptor(), CryptoStreamMode.Write))  
                    {  
                        cs.Write(Msg, 0, Msg.Length);  
                        cs.Close();  
                    }  
                    encryptedBytes = ms.ToArray();  
                }  
            }  
  
            return encryptedBytes;  
        }  
  
        [HttpPost]  
        public ActionResult Decryption(string Text2, string Key2)  
        {  
            // Convert String to Byte  
            byte[] MsgBytes = Convert.FromBase64String(Text2);  
            byte[] KeyBytes = Encoding.UTF8.GetBytes(Key2);  
            KeyBytes = SHA256.Create().ComputeHash(KeyBytes);  
  
            byte[] bytesDecrypted = AES_Decryption(MsgBytes, KeyBytes);  
  
            string decryptionText = Encoding.UTF8.GetString(bytesDecrypted);  
  
  
            TempData["TDecrypted"] = decryptionText;  
            return RedirectToAction("Index");  
        }  
  
        public byte[] AES_Decryption(byte[] Msg, byte[] Key)  
        {  
            byte[] decryptedBytes = null;  
  
            // Set your salt here, change it to meet your flavor:  
            // The salt bytes must be at least 8 bytes.  
            byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };  
  
            using (MemoryStream ms = new MemoryStream())  
            {  
                using (RijndaelManaged AES = new RijndaelManaged())  
                {  
                    AES.KeySize = 256;  
                    AES.BlockSize = 128;  
  
                    var key = new Rfc2898DeriveBytes(Key, saltBytes, 1000);  
                    AES.Key = key.GetBytes(AES.KeySize / 8);  
                    AES.IV = key.GetBytes(AES.BlockSize / 8);  
  
                    AES.Mode = CipherMode.CBC;  
  
                    using (var cs = new CryptoStream(ms, AES.CreateDecryptor(), CryptoStreamMode.Write))  
                    {  
                        cs.Write(Msg, 0, Msg.Length);  
                        cs.Close();  
                    }  
                    decryptedBytes = ms.ToArray();  
                }  
            }  
  
            return decryptedBytes;  
        }  
  
    }  
}  

بر روی Index کلیک راست کنید و گزینه ی Add View را انتخاب کنید.

@  
{  
    ViewBag.Title = "Index";  
    Layout = "~/Views/Shared/_Layout.cshtml";  
}  
  
< h2 > Encryption And Decryption < /h2>  
  
< div style = "color:red;"  
id = "EncryptedText" > Encrypted Message: @ViewData["Encrypted"] < /div>  
  
  
  
< div style = "color:red;"  
id = "DecryptedText" > Decrypted Message: @ViewData["Decrypted"] < /div>  
  
  
  
< pre > @using(Html.BeginForm("Encryption", "AES", FormMethod.Post)) { & lt;  
    label id = "lbk1" > Key: & lt;  
    /label><input name="Key" id="Key" type="text" / >  
    < br / >  
        < br / >  
        & lt;  
    label id = "lbk2" > Message: & lt;  
    /label><input name="Text" id="Text" type="text" / >  
    < br / >  
        < br / >  
        & lt;  
    input id = "btnEncryption"  
    type = "submit"  
    value = "Encryption" / >  
        < br / >  
        < br / >  
}  

چگونه یک برنامه را تست کنیم؟

به سایت زیر بروید: http://technical.cosmicverse.info/AES/Index

برای رمزنگاری :

یک کلید وارد کنید .مثلا : 122

یک پیام وارد کنید. Mahsa

دکمه ی "رمزنگاری" را بزنید.

در این مرحله ، متن رمزنگاری شده ای مثل 7gkI7SpPzsOiJ8O2OO2jOQ== خواهید دید.

برای رمز گشایی :

کلید مشابه را وارد کنید."122"

پیام رمزنگاری شده را وارد کنید. 7gkI7SpPzsOiJ8O2OO2jOQ==

دکمه "رمزگشایی" را بزنید.

در این مرحله ، متن رمزگشایی شده ای مثل Mahsa خواهید دید.

زبان نشانه گذاری توافق امنیتی (SAML : Security Assertion Markup Language)

SAML یک زبان مبتنی بر XML و استاندارد است که داده ها را فرمت می کند. این زبان قرار است اطلاعات کاربر را مثل یک داده  رمزنگاری شده بین یک identity provider و یک service provider جا به جا کند . این زبان شامل یک تگ (tag) مخصوص است که حاوی اطلاعات رمزنگاری شده است.

<saml:Assertion ..>   
“includes important message from identity provider to service provider  
“Who is this user (Attribute Identity)  
“Is he/she allowed to consume service?  
</saml:Assertion>

پروتکل SAML یک درخواست است به این صورت که service provider از طریق یک کانال امن یک direct query (پرس و جوی مستقیم) را از identity provider درخواست می کند. کاربرد متداول SAML برای Web Browser Single Sign-On (SSO) ها است . در زمانی که این درخواست فرستاده می شود، اتفاقات زیر توسط SAML روی می دهند:

درخواست منابع موردنیاز

کاربر با یک مرورگر مثل chrome یا Mozilla وارد می شود و در نوار آدرس ، www.sample.com را تایپ می کند (به عنوان مثال) و یک درخواست برای استفاده از یک سرویس خاص از stackoverflow به عنوان service provider می فرستد. این کاربر می تواند با استفاده از نام کاربری و رمزعبور مستقیما با استفاده از احراز هویت سایت Stack وارد شود و یا یکی از گزینه های احراز هویت از صفحه ی log in را استفاده کند.

Redirect کاربر به SSO Service

فرض کنید که کاربر برای احراز هویت خودش ، می خواهد از Google استفاده کند، بنابراین stackoverflow آن کاربر را از http://www.stackoverflow.com به https://accounts.google.com هدایت ( و یا در اصطلاح Redirect ) می کند.

درخواست SSO Service

در این مثال ، stackoverflow یک service provider است که سرویس های مطلوب کاربر را فراهم می کند و Google.com نیز یک identity provider است که عملیات Single Sign-On را برای کاربر انجام می دهد.

Google عملیات احراز هویت را اینطور انجام می دهد که از کاربر برخی اطلاعات را درخواست می کند. این اطلاعات به کاربر تعلق دارند، مثل نام کاربری و رمز عبور  و زمانی که کاربر این اطلاعات را وارد کند، بررسی می کند که آیا این اطلاعات معتبر هستند یا نه . Identity provider ها از directory service هایی مثل LDAP ، Radius و Active Directory برای انجام فرآیند احراز هویت استفاده می کنند.

پاسخ به وسیله XHTML Form

در این مرحله کاربر باید بر روی یک دکمه تایید در داخل Google.com که identity provider ما محسوب می شود، کلیک کند تا اطلاعاتی مثل نام کاربری و رمز عبور ایمیل را وارد کند و آن ها را به service provider انتقال بدهد. زمانی که کاربر این عملیات را انجام می دهد ، identity provider یک XHTML form به service provider به عنوان پاسخ می فرستد.

<form method="post" action="https://sp.example.com/SAML2/SSO/POST" ...>  
  
   <input type="hidden" name="SAMLResponse" value="response" />  
  
   <input type="submit" value="Submit" />  
  
</form> 

سرویس درخواست تایید اطلاعات کاربر

در XHTML بالا، identity provider به کاربر اجازه می دهد تا از سرویس های service provider برای  redirect کردن کاربر به service provider استفاده کند. (در زمانی که مشخص شد کاربر مورد تایید سایت است و می تواند از سرویس های سایت استفاده کند)

هدایت مستقیم کاربر به منابع درخواستی

در این مرحله، service provider یک فرآیند مجوزدهی برای بررسی میزان دسترسی کاربر برای هر service انجام می دهد و سپس کاربر به سمت منابع درخواستی اش هدایت می شود.

درخواست منابع موردنیاز

کاربر از سایت یک سری منابع خاص را درخواست می کند و همانطور که در بالا اشاره کردیم، اگر اطلاعات کاربر توسط service provider تایید شد، کاربر می تواند از این منابع استفاده کند. مثل http://astronomy.stackexchange.com/

پاسخ به کاربر با منابع درخواستی

اگر کاربر اجازه دسترسی به سرویس های موردنظرش را داشت، service provider او را مستقیم به سمت منابع هدایت خواهد کرد.

دیکشنری

در این مقاله از برخی لغات تخصصی استفاده کردیم که به توضیح بیشتری احتیاج دارند. این بخش می تواند در درک مفاهیم این واژه ها به شما کمک کند.

XML

زبان XML مخفف (Extensible Markup Language) یک زبان نشانه گذاری است که شامل قوانین خاصی برای encode و format کردن اسناد است . به وسیله این زبان می توانیم آن ها را برای افراد و ماشین ها قابل خواندن کنیم. XML برای استفاده در برنامه های وب و سرویس ها مفید است . می توانیم از آن ها برای دسته بندی انواع مختلفی از ساختار داده ها و زبان های انسانی استفاده کنیم.

Xml شامل قوانینی برای تنظیم محتوای متن هاست. شامل یک تگ <div></div> است ، با خصوصیاتی مثل یک کلاس در درون آن ، “<div class=”class1”></div>” ، در نهایت اطلاعات ما در درون این tag   قرار می گیرند . به عنوان مثال، “Hello” در درون “<div class=”class1”>Hello</div>” قرار می گیرد و بخش declaration آن با <?xml version="1.0" encoding="UTF-8"?> شروع می شود.

Token امنیتی

Token امنیتی یک وسیله است که وظیفه تولید کلید برای فرآیندهای احراز هویت را بر عهده دارد. این وسیله، یک ابزار اضافه برای ایجاد امنیت بالاتر است که می تواند برای ما مشخص کند کاربر حقیقتا آن کسی که ادعا می کند، هست یا نه. این وسیله مشابه یک تولید کننده ی کلید (Key Generator) ، USB Connector و یا Bluetooth Wireless است. این وسیله یک کلید برای مسائل رمزنگاری در خودش ذخیره می کند.(توابع رمزنگاری و رمزگشایی ) و این کلید می تواند یک علامت بیومتریک مانند اثر انگشت و یا امضای دیجیتال باشد. این کلید با توابع رمزنگاری خاص خودش می تواند یک عدد دیجیتالی تولید کند . کاربران برای ورود می بایست این عدد دیجیتالی را بعد از نام کاربری و رمزعبور خودشان وارد کنند. این کلید ثابت می کند که کاربر، دقیقا همان شخصی است که ادعا می کند. در شکل زیر ، کاربر باید نام کاربری و رمز عبور را وارد کند، سپس کلید موجود بر روی دستگاه را فشار دهد و عددی که دریافت می کند را در قسمت passcode وارد کند . (در این جا این عدد ، “54392971” است) سپس بر روی “Log On” کلیک کند.

Service Provider

Service Provider  با شرکت تماس می گیرد. شرکت لیستی از سرویس ها را برای کاربرانش فراهم می کند. این سرویس ها در گروه های ارتباط از راه دور ، برنامه ، محل ذخیره سازی داده ها و اینترنت دسته بندی می شوند.

Identity Provider

Identity Provider بخش سوم کار است، دو بخش قبلی را با هم بررسی کردیم (برای احراز هویت دو بخش داریم : یکی مشتری که آن را با نام کاربر می شناسیم و یکی فراهم کننده ی خدمات که آن را با نام service provider می شناسیم.) این بخش در شناسایی کاربر به ما کمک می کند. یعنی مشخص می کند آیا کاربر مجوز دسترسی به سرویس ها و اطلاعات را دارد یا خیر.

به عنوان مثال، stackoverflow.com یک فراهم کننده ی خدمات به شمار می رودservice provider)) در این سایت شما می توانید سوال خودتان را در بخش مربوطه مطرح کنید. اگر کاربر بخواهد در این سایت log in کند ، امکانات مختلفی برای این کار وجود دارد ،مثل log in  با استفاده از Google ، Facebook ، Yahoo ، LiveJournal ، WordPress ، Blogger و AOL یا با استفاده از stackoverflow . اگر کاربر گزینه ی stackoverflow را انتخاب کند باید یک نام کاربری و رمز عبور در این سایت برای خودش انتخاب کند  و همه ی اطلاعات را دوباره وارد کند. هر زمانی که کاربر گزینه های دیگری را به عنوان Identity Provider مورد نظر خودش انتخاب کند، از سایت stackoverflow به سایت مربوطه هدایت می شود و نام کاربری و رمزعبور مورد نیاز برای آن سایت را وارد می کند و سپس این سایت ها تصمیم می گیرند که کاربر مجاز هست و یا خیر. اگر کاربر مجاز شناخته شود، اطلاعات کاربر مثل آدرس ایمیل به سایت stackoverflow نیز منتقل می شود. مسائله ی مهم امنیتی که در اینجا وجود دارد این است که Identity Provider (IP) نمی تواند بفهمد این شخص در حال انجام چه کاری است و به همین دلیل اطلاعات محرمانه ی کاربر محافظت خواهند شد.

LDAP (Lightweight Directory Access Protocol)

LDAP یک پروتکل اینترنتی است . LDAP برای جستجوی اطلاعات ، آن ها را شماره گذاری می کند و سپس بر اساس موارد خواسته شده، اطلاعات را فیلتر می کند.

Active Directory

Active Directory یک directory service مبتنی بر windows domain همراه با سرویس هایی برای احراز هویت و مجوز دهی است. کاربران به کامپیوتر ها log on  می کنند که در دامنه ی windows هستند و active directory رمز عبور های پذیرفته شده را به وسیله LDAP چک می کند. اگر نام کاربری و رمزعبور، دسترسی به بخش های درخواست شده را داشتند، active directory نیز اجازه دسترسی می دهد.

Windows Domain

دامنه ی Windows  یک نوع شبکه است که در آن همه کاربران و کامپیوتر ها و وسایل جانبی در یک کامپیوتر مرکزی ثبت نام شده اند.

Federated Identity Provider

Federated identity یک تکنولوژی برای ایجاد یک ارتباط بین user identity (نام کاربری و رمزعبور) و مدیریت identity است ، برای این که بتوانیم به این وسیله کاربر را احراز هویت کنیم و به بخش مرکزی اطلاع بدهیم که کاربر مجاز است. این گفته به این معناست که شما می توانید فقط یک نام کاربری و رمز عبور داشته باشید و در چندین سایت با همین نام کاربری و رمزعبور مجاز شناخته شوید. Single Sign-On یک زیرمجموعه از federated identity است .


U-Prove


U-Prove یک تکنولوژی رمزنگاری است. این تکنولوژی زمانی که کاربر می خواهد در چندین سایت از یک نام و کاربری و رمزعبور برای ورود استفاده کند، حداقل اطلاعات را در اختیار سایت ها قرار می دهد و به این ترتیب باعث می شود که کاربر امنیت بالایی داشته باشد. با استفاده از این تکنولوژی ، ردیابی کردن کارهای کاربر دشوار می شود.

OpenID

OpenID یک پروتکل است که به کاربران اجازه می دهد تا فرآیند احراز هویت خودشان را از طریق سایر وب سایت ها ادامه بدهند. این وب سایت ها “Relying Parties” نامیده می شوند.

خلاصه

ما در این مقاله از یکی از متداول ترین تکنیک های رمزنگاری به نام AES استفاده کردیم. AES یک تابع رمزنگاری متقارن است که از کلید های مشابه در سمت فرستنده و گیرنده استفاده می کند. AES کلید قدرتمندی تولید می کند که هکرها قادر به شکستن آن نیستند. بنابراین AES روش مناسبی برای حفاظت از داده ها در طول شبکه است .

آموزش asp.net mvc

فایل های ضمیمه
دانلود نسخه ی PDF این مطلب