ساخت سیستم احراز هویت دو مرحلهای با پایتون
احراز هویت دو مرحلهای (Two-Factor Authentication یا 2FA) یک لایه امنیتی اضافی به فرآیند ورود به سیستم اضافه میکند. به جای تکیه صرف بر رمز عبور (چیزی که میدانید)، 2FA نیاز به اثبات چیزی که دارید (مانند کد ارسال شده به تلفن همراه) یا چیزی که هستید (مانند اثر انگشت) دارد. این مقاله به شما نشان میدهد چگونه یک سیستم 2FA ساده را با استفاده از پایتون پیادهسازی کنید. این آموزش در دسته ‘امنیت و رمزنگاری در پایتون’ قرار میگیرد و برای توسعهدهندگانی که میخواهند امنیت برنامههای خود را افزایش دهند، مفید است.
مقدمه
در دنیای امروز، امنیت اطلاعات از اهمیت بالایی برخوردار است. حملات سایبری و سرقت اطلاعات به طور مداوم در حال افزایش هستند. استفاده از رمز عبور به تنهایی برای محافظت از حسابهای کاربری کافی نیست. هکرها میتوانند با استفاده از روشهای مختلف مانند حدس زدن رمز عبور، فیشینگ یا استفاده از بدافزارها، به رمز عبور کاربران دسترسی پیدا کنند.
احراز هویت دو مرحلهای با اضافه کردن یک لایه امنیتی اضافی، این خطر را به طور قابل توجهی کاهش میدهد. حتی اگر هکرها به رمز عبور کاربر دسترسی پیدا کنند، باز هم برای ورود به سیستم به کد تأییدیه نیاز دارند که معمولاً به تلفن همراه کاربر ارسال میشود.
پیشنیازها
برای دنبال کردن این آموزش، به موارد زیر نیاز دارید:
- پایتون 3.x
- یک محیط توسعه یکپارچه (IDE) مانند VS Code، PyCharm یا Jupyter Notebook
- آشنایی با مفاهیم پایهای پایتون مانند متغیرها، توابع، کلاسها و ماژولها
- آشنایی با مفاهیم پایهای امنیت و رمزنگاری
معماری سیستم
سیستم 2FA که در این آموزش پیادهسازی میکنیم، از اجزای زیر تشکیل شده است:
- سرور: مسئولیت مدیریت کاربران، تولید کد تأییدیه و اعتبارسنجی کد را بر عهده دارد.
- کاربر: وارد اطلاعات کاربری خود میشود و کد تأییدیه را دریافت و وارد میکند.
- تولید کننده کد: از یک الگوریتم برای تولید کد تأییدیه یکبار مصرف (One-Time Password یا OTP) استفاده میکند.
- ارسال کننده پیام: کد تأییدیه را از طریق پیامک یا ایمیل به کاربر ارسال میکند (در این آموزش از شبیهسازی ارسال پیامک استفاده میکنیم).
پیادهسازی سیستم
1. نصب کتابخانههای مورد نیاز
برای تولید کد OTP، از کتابخانه `pyotp` استفاده میکنیم. این کتابخانه پیادهسازیهای مختلفی از الگوریتمهای OTP مانند TOTP (Time-based One-Time Password) و HOTP (HMAC-based One-Time Password) را ارائه میدهد.
برای نصب کتابخانه `pyotp`، از دستور زیر در ترمینال استفاده کنید:
pip install pyotp
2. ایجاد کلاس User
ابتدا یک کلاس `User` ایجاد میکنیم که اطلاعات کاربری را ذخیره میکند.
class User:
def __init__(self, username, password, secret_key):
self.username = username
self.password = password
self.secret_key = secret_key
def verify_password(self, entered_password):
return self.password == entered_password
def generate_otp(self):
otp = pyotp.TOTP(self.secret_key)
return otp.now()
3. ایجاد کلاس AuthenticationServer
سپس یک کلاس `AuthenticationServer` ایجاد میکنیم که مسئولیت مدیریت کاربران و احراز هویت را بر عهده دارد.
import pyotp
import hashlib
class AuthenticationServer:
def __init__(self):
self.users = {}
def register_user(self, username, password):
# تولید کلید مخفی
secret_key = pyotp.random_base32()
# ذخیره کلید مخفی به صورت هش شده
hashed_secret_key = hashlib.sha256(secret_key.encode()).hexdigest()
user = User(username, password, hashed_secret_key)
self.users[username] = user
return secret_key # کلید مخفی برای کاربر نمایش داده میشود
def authenticate_user(self, username, password, otp):
if username not in self.users:
return False
user = self.users[username]
if not user.verify_password(password):
return False
# اعتبارسنجی OTP
totp = pyotp.TOTP(user.secret_key)
return totp.verify(otp)
4. شبیهسازی ارسال پیامک
در این آموزش، به جای ارسال پیامک واقعی، یک تابع شبیهسازی شده برای ارسال کد OTP به کاربر ایجاد میکنیم.
def send_otp_via_sms(secret_key):
otp = pyotp.TOTP(secret_key)
otp_code = otp.now()
print(f"کد تأییدیه شما: {otp_code}")
return otp_code
5. پیادهسازی فرآیند ثبتنام و ورود
در نهایت، فرآیند ثبتنام و ورود را پیادهسازی میکنیم.
# ایجاد یک نمونه از سرور احراز هویت
auth_server = AuthenticationServer()
# ثبتنام کاربر
username = input("نام کاربری را وارد کنید: ")
password = input("رمز عبور را وارد کنید: ")
secret_key = auth_server.register_user(username, password)
print(f"کلید مخفی شما: {secret_key}")
print("لطفاً این کلید را در یک مکان امن ذخیره کنید.")
# ورود کاربر
username = input("نام کاربری را وارد کنید: ")
password = input("رمز عبور را وارد کنید: ")
otp = input("کد تأییدیه را وارد کنید: ")
if auth_server.authenticate_user(username, password, otp):
print("ورود موفقیتآمیز!")
else:
print("ورود ناموفق!")
بهبود امنیت
سیستم 2FA که در این آموزش پیادهسازی کردیم، یک نمونه ساده است و میتوان آن را با استفاده از روشهای مختلفی بهبود بخشید:
- استفاده از HTTPS: برای محافظت از اطلاعات کاربری در حین انتقال، از پروتکل HTTPS استفاده کنید.
- ذخیره سازی امن کلید مخفی: کلید مخفی را به صورت امن در پایگاه داده ذخیره کنید و از روشهای رمزنگاری برای محافظت از آن استفاده کنید.
- محدود کردن تعداد تلاشهای ناموفق: برای جلوگیری از حملات brute-force، تعداد تلاشهای ناموفق برای ورود به سیستم را محدود کنید.
- استفاده از الگوریتمهای قوی رمزنگاری: از الگوریتمهای قوی رمزنگاری برای تولید و اعتبارسنجی کد OTP استفاده کنید.
- پیادهسازی مکانیزمهای ضد فیشینگ: برای جلوگیری از حملات فیشینگ، از مکانیزمهای ضد فیشینگ مانند استفاده از نام دامنه معتبر و نمایش گواهی SSL استفاده کنید.
نتیجهگیری
در این مقاله، نحوه ساخت یک سیستم احراز هویت دو مرحلهای ساده با استفاده از پایتون را یاد گرفتیم. 2FA یک لایه امنیتی مهم به برنامههای شما اضافه میکند و میتواند به محافظت از حسابهای کاربری در برابر حملات سایبری کمک کند. با پیادهسازی 2FA و رعایت نکات امنیتی، میتوانید امنیت برنامههای خود را به طور قابل توجهی افزایش دهید.

بدون دیدگاه