پیامک OTP همان کدی است که احتمالا بارها موقع ورود به یک سایت، ساخت حساب کاربری یا انجام یک عملیات حساس روی گوشی‌تان دیده‌اید. مثلا شماره موبایل را وارد می‌کنید و چند ثانیه بعد پیامکی با متنی شبیه «کد تایید شما ۴۸۲۳۱ است» دریافت می‌کنید. 

OTP مخفف One-Time Password به معنی «رمز عبور یکبار مصرف» است. یعنی رمزی که برای یک فرایند احراز هویت تولید می‌شود و پس از استفاده یا پایان زمان اعتبار، دیگر نباید قابل استفاده باشد...

پیامک OTP چطور کار می‌کند؟ از تولید رمز تا تایید هویت کاربر

برای اینکه سازوکار OTP را بهتر درک کنیم، فرض کنید کاربری می‌خواهد وارد حساب خود در یک اپلیکیشن شود. شماره موبایلش را وارد می‌کند و روی گزینه «دریافت کد تایید» می‌زند. از این لحظه، سیستم باید یک کد تولید کند، آن را به شماره مربوط به کاربر برساند و بعد هنگام وارد کردن کد، بررسی کند که آیا واقعا همان کدی است که سیستم صادر کرده یا نه.

احراز هویت یا Authentication فرایندی است که طی آن یک سیستم بررسی می‌کند کاربر یا موجودیتی که درخواست دسترسی دارد، همان کسی است که ادعا می‌کند. در OTP، کد یکبار مصرف یکی از اطلاعاتی است که برای انجام این بررسی استفاده می‌شود.

پیامک OTP چطور کار می‌کند؟

فرایند را می‌توان به شکل ساده در چند مرحله دید:

مرحله اول) کاربر درخواست کد می‌کند...

کاربر شماره موبایل خود را وارد می‌کند و درخواست ورود، ثبت‌نام یا تایید یک عملیات را می‌فرستد. در این مرحله، سیستم باید بررسی کند که درخواست مربوط به کدام حساب و کدام شماره تلفن است.

مرحله دوم) سرور یک کد یکبار مصرف تولید می‌کند.

سرور همان بخش پردازشی سیستم است که درخواست کاربر را دریافت و منطق مربوط به آن را اجرا می‌کند. سرور برای این درخواست یک OTP ایجاد می‌کند؛ برای مثال یک کد شش رقمی.

نکته مهم اینجاست که OTP نباید صرفا یک عدد تصادفی ساده و قابل پیش‌بینی باشد. OWASP توصیه می‌کند کدهای OTP با یک مولد اعداد تصادفی امن از نظر رمزنگاری تولید شوند و اطلاعات حساس مربوط به خود OTP نیز به شکل نامناسب در لاگ‌ها یا پایگاه داده نگهداری نشود.

مرحله سوم) کد برای شماره موبایل ارسال می‌شود.

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

API مخفف Application Programming Interface است و به زبان ساده، مجموعه‌ای از قواعد و رابط‌هایی است که به دو نرم‌افزار اجازه می‌دهد با یکدیگر ارتباط برقرار کنند. بنابراین، نرم‌افزار شما لازم نیست مستقیما با شبکه مخابراتی ارتباط داشته باشد؛ می‌تواند از طریق API درخواست کند که یک پیام مشخص برای یک شماره ارسال شود.

مرحله چهارم) کاربر کد را وارد می‌کند.

کاربر پیامک را دریافت می‌کند و کد را در کادر مربوط به تایید وارد می‌کند. سیستم سپس کد واردشده را با اطلاعات مربوط به همان درخواست تطبیق می‌دهد.

مرحله پنجم) سیستم کد را تایید یا رد می‌کند

اگر کد صحیح باشد، هنوز یک نکته مهم باقی می‌ماند: سیستم باید بررسی کند که کد منقضی نشده، قبلا استفاده نشده و تعداد تلاش‌های ناموفق از حد مجاز بیشتر نشده باشد. در صورت تایید، فرایند احراز هویت تکمیل می‌شود و کاربر به مرحله بعد می‌رود. در غیر این صورت، دسترسی باید رد شود.

به همین دلیل، OTP صرفا «یک عددی که با پیامک می‌فرستیم» نیست. امنیت آن به کل چرخه تولید، نگهداری، ارسال و اعتبارسنجی وابسته است.

انواع OTP و روش انتقال آن‌ها  

روش OTP

نحوه تولید کد

نحوه دریافت

نیاز به اینترنت

مهم‌ترین کاربرد

SMS OTP

توسط سرور یا سرویس احراز هویت

پیامک

برای دریافت کد معمولا خیر

کد معمولا خیر

ورود، ثبت‌نام، تایید شماره

TOTP

بر اساس کلید مشترک و زمان

اپلیکیشن Authenticator

برای تولید کد معمولا خیر

ورود امن و MFA

HOTP

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

اپلیکیشن یا توکن

خیر

احراز هویت با توکن

Email OTP

توسط سرور

ایمیل

بله

ثبت‌نام و بازیابی حساب

Push OTP / Push Authentication

توسط سرویس احراز هویت

اعلان در اپلیکیشن

بله

ورود و تایید درخواست

رمز یکبار مصرف چگونه ارسال می‌شود؟ نقش پنل پیامکی، API و سرور 

حالا به بخش کاربردی‌تر ماجرا برسیم: وقتی یک کسب‌وکار می‌خواهد برای کاربرانش کد تایید بفرستد، دقیقا چه اتفاقی پشت صحنه رخ می‌دهد؟

فرض کنید یک فروشگاه اینترنتی دارید و کاربر هنگام ثبت‌نام شماره موبایلش را وارد می‌کند. سیستم شما باید در همان چند ثانیه یک کد تولید کند و آن را به دست کاربر برساند. برای این کار، معمولا اپلیکیشن یا وب‌سایت شما با یک سرویس ارسال پیامک ارتباط برقرار می‌کند.

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

نقش سرور در تولید و مدیریت OTP

فرض کنیم کاربر شماره 091211111 را وارد کرده. سرور پس از دریافت درخواست می‌تواند یک کد تصادفی، مثلا 58314 تولید کند. سپس این کد را همراه با اطلاعات لازم برای ارسال پیامک در اختیار سرویس پیامکی قرار می‌دهد.

اما سرور نباید صرفا کد را تولید و ارسال کند؛ باید وضعیت آن را نیز مدیریت کند. برای مثال باید بداند این کد برای کدام شماره و برای چه درخواست یا نشست کاربری ایجاد شده، چه زمانی منقضی می‌شود و آیا قبلا استفاده شده است یا نه.

TTL یا Time To Live به مدت زمانی گفته می‌شود که یک داده یا کد اجازه دارد معتبر باقی بماند. در OTP، TTL باید کوتاه باشد تا اگر کد در اختیار فرد دیگری قرار گرفت، فرصت سوءاستفاده از آن محدود شود. OWASP نیز کوتاه بودن زمان اعتبار OTP و یکبارمصرف بودن آن را از اصول مهم پیاده‌سازی می‌داند.

نقش API در ارسال خودکار کد تایید

بعد از تولید OTP، نوبت به ارسال می‌رسد. سیستم می‌تواند از طریق API، شماره مقصد و محتوای موردنظر را به سرویس پیامکی اعلام کند. سرویس پیامکی نیز درخواست را پردازش کرده و پیام را برای شماره مقصد ارسال می‌کند.

برای کسب‌وکار، این یعنی لازم نیست کارشناس هر بار به صورت دستی پیامک را ارسال کند. کاربر درخواست ورود می‌دهد، سیستم کد را تولید می‌کند و فرایند ارسال پیامک به شکل خودکار انجام می‌شود.

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

OTP چه تفاوتی با پیامک تبلیغاتی دارد؟

یک اشتباه رایج این است که هر پیامکی را که از یک سامانه پیامکی ارسال می‌شود، در یک دسته قرار دهیم. پیامک OTP ماهیت متفاوتی با پیامک تبلیغاتی دارد. کاربر معمولا خودش با انجام یک عمل مشخص، مانند ورود یا ثبت‌نام، درخواست دریافت کد را ایجاد کرده است.

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

در یک کسب‌وکار دیجیتال حتی ممکن است داده‌های مربوط به تایید شماره موبایل در کنار اطلاعات مشتری در نرم افزار CRM یا سیستم مدیریت ارتباط با مشتری قرار بگیرد. نرم افزار CRM نرم‌افزاری است که اطلاعات و تعاملات مشتریان را برای مدیریت بهتر ارتباط با آنها ثبت و سازمان‌دهی می‌کند.

کاربردهای پیامک OTP چیست؟

کاربردهای پیامک OTP چیست؟

اگر کمی به تجربه روزمره خودتان دقت کنید، احتمالا متوجه می‌شوید که پیامک OTP فقط برای ورود به حساب کاربری استفاده نمی‌شود. هر جا یک سرویس لازم داشته باشد مطمئن شود شماره موبایل واقعا در اختیار فردی است که درخواست را ثبت کرده، امکان استفاده از کد یکبار مصرف وجود دارد.

کاربرد اول) تایید شماره موبایل موقع ثبت‌نام

یکی از رایج‌ترین کاربردهای پیامک OTP، تایید مالکیت شماره موبایل است. کاربر شماره خود را هنگام ثبت‌نام وارد می‌کند و سیستم یک کد برای همان شماره می‌فرستد. اگر کاربر بتواند کد را وارد کند، سیستم یک نشانه عملی در اختیار دارد که نشان می‌دهد در همان لحظه به آن شماره دسترسی دارد.

این روش برای جلوگیری از ثبت‌نام‌های جعلی یا ایجاد تعداد زیادی حساب با شماره‌های نامعتبر هم کاربرد دارد. البته OTP به تنهایی ثابت نمی‌کند که فرد صاحب قانونی خط است؛ فقط نشان می‌دهد در زمان تایید، به آن شماره دسترسی داشته است.

کاربرد دوم) ورود به حساب کاربری

در بعضی سرویس‌ها، OTP جایگزین رمز عبور می‌شود و کاربر فقط شماره موبایل خود را وارد می‌کند. در بعضی دیگر، OTP در کنار رمز عبور استفاده می‌شود تا یک لایه امنیتی اضافه ایجاد کند.

در حالت دوم، موضوع به احراز هویت چندعاملی یا MFA نزدیک می‌شود. MFA یعنی کاربر برای اثبات هویت خود باید بیش از یک نوع مدرک یا عامل احراز هویت ارائه کند؛ مثلا رمز عبور به عنوان چیزی که می‌داند و کدی که به تلفن همراهش ارسال شده، به عنوان چیزی که در اختیار دارد.

کاربرد سوم) تایید عملیات حساس

گاهی کاربر وارد حسابش شده، اما قرار است عملیاتی انجام دهد که حساس‌تر از یک ورود معمولی است؛ مثلا تغییر اطلاعات حساب یا تایید یک درخواست مهم. در چنین شرایطی می‌توان دوباره از OTP استفاده کرد تا سیستم قبل از انجام عملیات، یک مرحله تایید اضافه داشته باشد.

این مدل استفاده را معمولا Step-up Authentication یا «احراز هویت تقویتی» می‌نامند؛ یعنی سیستم وقتی سطح ریسک یک عملیات بالاتر می‌رود، یک مرحله احراز هویت اضافه درخواست می‌کند. سرویس‌های احراز هویت مدرن نیز OTP را برای چنین سناریوهایی در کنار ورود، بازیابی حساب و تایید تراکنش ارائه می‌کنند.

کاربرد چهارم) بازیابی حساب و تغییر اطلاعات

یکی دیگر از کاربردهای شناخته‌شده OTP، بازیابی دسترسی است. برای نمونه، کاربری رمز عبورش را فراموش کرده و سیستم از شماره موبایل ثبت‌شده او برای ارسال یک کد تایید استفاده می‌کند.

البته اینجا باید دقت بیشتری به خرج داد. بازیابی حساب عملا یک مسیر احراز هویت محسوب می‌شود و اگر این مسیر بیش از حد ساده یا ضعیف طراحی شود، می‌تواند به نقطه ورود مهاجم تبدیل شود. OWASP نیز تاکید می‌کند که فرایندهای بازیابی حساب باید از نظر امنیتی به اندازه خود فرایند ورود جدی گرفته شوند.

کاربرد پنجم) تایید تراکنش یا تغییرات مهم حساب

در برخی سامانه‌ها از OTP برای تایید عملیاتی استفاده می‌شود که کاربر باید صراحتا انجام شدن آن را تایید کند. این کاربرد با «ورود به حساب» یکی نیست. کاربر ممکن است از قبل وارد سیستم شده باشد اما برای انجام یک عملیات خاص، دوباره از او کد خواسته شود.

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

آیا پیامک OTP امن است؟ 

OTP یک روش امن است و در صورت پیاده‌سازی درست می‌تواند جلوی بسیاری از سوءاستفاده‌های ساده، حدس زدن رمزهای ثابت و بخشی از حملات خودکار را بگیرد. اما وقتی OTP از طریق SMS ارسال می‌شود، امنیت کل فرایند علاوه بر نرم‌افزار، به امنیت شماره تلفن و شبکه مخابراتی هم وابسته می‌شود.

OWASP همچنان SMS را یکی از روش‌های قابل استفاده برای ارسال کد یکبار مصرف معرفی می‌کند، اما در راهنمای فعلی خود به خطرهایی مانند SIM Swap، حملات مرتبط با SS7 و انتقال شماره اشاره کرده و استفاده از SMS را برای سناریوهای پرریسک محدود می‌داند. NIST نیز استفاده از PSTN، شامل SMS و تماس تلفنی برای ارسال اسرار احراز هویت، را در دسته «restricted authenticator» قرار داده است.

برای امن‌تر شدن OTP چه نکاتی باید رعایت شود؟

امنیت OTP بیشتر از آنکه به تعداد ارقام کد وابسته باشد، به نحوه طراحی کل فرایند مربوط است. حداقل باید برای کد زمان انقضا تعریف شود، هر کد فقط یک بار قابل استفاده باشد و تعداد تلاش‌های ناموفق محدود شود.

همچنین هنگام درخواست مجدد، بهتر است کد قبلی بی‌اعتبار شود و یک کد جدید تولید شود. نگهداری OTP در لاگ‌ها یا ذخیره‌سازی طولانی‌مدت آن به صورت متن ساده نیز نباید انجام شود. این موارد در راهنمای امنیتی OWASP به صورت مشخص توصیه شده‌اند.

اگر سرویس شما اطلاعات حساس یا عملیات مالی مهمی دارد، نباید صرفا به این دلیل که OTP برای کاربران آشناست، آن را مناسب‌ترین عامل احراز هویت فرض کنید.

جمع‌بندی

همانطور که دیدیم، پیامک OTP در ظاهر فقط یک پیام کوتاه حاوی چند رقم است، اما پشت آن یک فرایند کامل احراز هویت قرار دارد. برای کسب‌وکارهایی که تعداد زیادی کاربر دارند، کیفیت پنل پیامک و API اهمیت عملی پیدا می‌کند. یک زیرساخت مناسب باید علاوه بر امکان ارسال پیامک، ابزارهایی برای مدیریت درخواست‌ها، کنترل خطاها و پایش عملکرد در اختیار کسب‌وکار قرار دهد.