معمولا در برنامههای وب مثل سامانههای آموزش دانشگاهها یا سامانههای اینترنت بانک برای جلوگیری از کارهای خرابکارانه توسط رباتها، از کپچا استفاده میشود. یکی از معمولترین شکل کپچا به صورت تصویر است. در این نوع کپچا معمولا حروف و اعدادی انگلیسی به شکلی کنار هم قرار میگیرند و از کاربر پرسیده میشود که بگوید که این حروف و اعداد چیست. معمولا مسئولین این سایتها فکر میکنند که رباتها یا برنامههای کامپیوتری نمیتوانند پاسخ این سؤالات را بدهند. مواقع زیادی هم رخ میدهد که این کپچاها به غیر از اعصاب خوردی چیزی برای ما ندارد. [![کپچای گلستان](https://camo.githubusercontent.com/83ca50b5588375a403f8064d6c3230db9e3bf2d1/687474703a2f2f626179616e626f782e69722f69642f343539353236393138393636323935323632363f76696577)](https://camo.githubusercontent.com/83ca50b5588375a403f8064d6c3230db9e3bf2d1/687474703a2f2f626179616e626f782e69722f69642f343539353236393138393636323935323632363f76696577) در این پروژه ما میخواهیم که یک افزونه برای مروگر بنویسیم که یک کپچا را بکشند و به صورت خودکار آن را حل نماید. برای مثال سادهتر میتوانید از کپچای [سامانه آموزش دانشگاه شریف](http://edu.sharif.edu/) استفاده کنید. [![کپچای شریف](https://camo.githubusercontent.com/5ea014cea5ddd1a2aa244ce21fe61a3effcd6e40/687474703a2f2f626179616e626f782e69722f69642f373030333934353532323732303636313236393f76696577)](https://camo.githubusercontent.com/5ea014cea5ddd1a2aa244ce21fe61a3effcd6e40/687474703a2f2f626179616e626f782e69722f69642f373030333934353532323732303636313236393f76696577) مراحل یک سیستم برای اینکار میتواند بدین صورت باشد: 1. جمع آوری یک پایگاه داده از کپچاها و تهیه پاسخ هر کدام از آنها به صورت دستی 2. جداسازی هر حرف یا عدد از هم. (یعنی یک عکس را بگیرد و چند عکس کوچکتر دیگر درست بکند که هر کدام شامل یک حرف است). 3. استفاده از OCR یا آموزش یک دستهبند ساده که هر حرف را تشخصی بدهد. برای دسته بند هم میتوان از شبکههای عصبی یا از SVM استفاده کرد. # مقدمه کپچا که انگلیسی آن بصورت CAPTCHA می باشد از سر نام جمله زیر آمده است: **C**ompletely **A**utomated **P**ublic **T**uring Test to tell **C**omputers and **H**umans **A**part آزمونی برای شناسایی انسان از رایانه است.اولین بار تست CAPTCHA توسط شخصی به نام آلن تورینگ- که برخی او را پدر رایانههای جدید میدانند - ارائه شد. هدف تورینگ از این تست، فهمیدن این نکته بود که آیا گجتها مانند انسان فکر میکنند یا نه! مدل اولیه این تست در گذشته شامل انجام بازی از نوع بازیهای تقلیدی بود که در آن، بازپرس یک سری سوالات از شرکتکنندگان مطرح میکند. یکی از شرکتکنندگان، رایانه معمولی و دیگری انسان است، بازپرس امکان مشاهده هیچ یک از طرفین را ندارد، به همین دلیل هم نمیتواند تشخیص دهد کدامیک از آنها کاربر معمولی و کدامیک ماشین هستند. سعی می شود کپچا ها بگونه ای طراحی شوند که تشخیص آن برای انسان کار ساده و برای کامپیوتر ها مشکل باشد نوع های مختلفی از کپچا ها موجود است که چند مورد را زیر معرفی کرده ایم. 1- متداول ترین آن ها تصویری از حروف و اعداد به هم ریخته است که داری نویس هایی در پس زمینه خود هستند مانند شکل مقابل: 2- -کپچاهای صوتی که شامل صدای یک سری حروف و اعداد بطور واضح می باشند اما برای خلاصی از اپلیکیشن های تشخیص صدا ممکن است صداهایی را در پشت زمینه ایجاد کند. 3- کپچا هایی که عکس هستندو از کاربر خود میخواهند شی خاصی را در عکس تشخیص دهند بطور مثال در شکل زیر خواسته شده گربه ها تشخیص داده شوند: این ها نمونه هایی از کپچا های موجود برای تشخیص انسان و کامپیوتر بود که معرفی شدند اما کپچا ها به اینها خلاصه نشده و به انجام عملیات ریاضی, درک مطلب و... تعمیم داده شده است. **موارد استفاده کپچا:** کپچا کاربردهای زیادی در جهت افزایش امنیت دارد که در ادامه به مهمترین آنها اشاره خواهیم کرد: **جلوگیری از نظرات اسپم در سایت و وبلاگ** اکثر صاحبان وبلاگ یا سایت ها با نرم افزارهای اتوماتیک آنلاین که اقدام به انتشار نظرات اسپم میکنند آشنایی دارند که معمولا به هدف افزایش رنک و بهبود سئو سایت اسپمر بکار میرود. با استفاده از کپچا تنها انسان ها قادر به انتشار نظر در بخش وبلاگ سایت شما خواهند بود و به این ترتیب نیاز به عضویت در سایت یا وبلاگ شما برای جلوگیری از نظرات اسپم نیست. نقش کپچا در بخش عضویت سایت سایت های زیادی در دنیا خدمات رایگان ارائه میدهند که نیازمند عضویت و ساخت اکانت از طرف افراد هستند. مهمترین آنها سیستم های ایمیل یاهو و گوگل هستند. تا چند سال پیش و قبل از بکارگیری کپچا بزرگترین مشکل آنها ساخت تعداد زیادی اکانت توسط روبات های اینترنتی بود که میتوانستند در چند دقیقه صدها ایمیل بسازند. استفاده از سیستم کپچا این امکان را فراهم کرد که تنها انسان ها قادر به تکمیل فرم و ثبت نام نهایی باشند و امروزه به یک ضرورت در سیستم های رایگان تبدیل شده است. جلوگیری از هک پسورد در گذشته و قبل از همه گیر شدن سیستم کپچا، یکی از روش های رایج برای هک کردن اکانت کاربران و دسترسی به اطلاعات ، آزمون و خطای کلمات عبور مختلف بوده است. در این روش هزاران کلمه از روی فرهنگ لغات برای یک نام کاربری مشخص امتحان میشد. امروزه با چند تلاش اشتباه در سیستم های ایمیل مانند یاهو یک کپچا به کاربر نشان داده میشود تا از این روش هک بخوبی جلوگیری شود.[1][2] با تمام فوایدی که برای کپچا ذکر شده است که البته محدود به موارد ذکر شده نمی باشد و قابلیت های بسیار دیگری نیز دارد نباید از این موضوع غافل شد که طراحی کپچا های سخت بطوریکه که برای انسان نیز وقت گیر باشد باعث کاهش ارتباط کاربران با سایت شما می شود. آیا می توان راه بهتری جایگزین کپچا نمود؟؟؟ # کارهای مرتبط با پیشرفت هوش مصنوعی و الگوریتم های یادگیری ماشین کپچاهای موجود با احتمال بالایی توسط ربات ها شکسته می شود به همین خاطر های راه های دیگری نیز ارائه شده است که به بررسی اجمالی آنها می پردازیم 1-کپچای صوتی کپچاها ی صوتی نوع دیگری از کپچا ها هستند که سری از حروف و اعداد را بیان میکنند و کاربر باید آن را تشخیص دهد و چون ربات ها با استفاده از اپلیکیشن های تشخیص صدا می توانند به راحتی این نوع از کپچا ها را شکست دهند در پس زمینه این کپچاها صداهای اضافی مانند نویز و موزیک نیز پخش می شود تا شکستن آن برای ربات ها کار آسانی نباشد. برای شکستن این کپچاها باید ویژگی های آن را استخراج کنیم تا روش های یادگیری ماشین را برای انجام ASR پیاده نماییم راه های مختلفی برای استخراج این ویژگی ها موجود است که بعضی از آن ها را معرفی می کنیم: 1-MFCC : که مانند سری فوریه می باشد دراین روش صوت را به باند های فرکانسی تبدیل میکنیم. 2- PLP: این روش برای تشخیص ویژگی هایی صوت مستقل از گوینده آن به کار می رود بنابرین با کمک PLP و شکل های دیگر آن RASTA-PLP میتوان به کلاس بندی ها چگونگی تشخیص حروف و اعداد را آموزش داد. در کپچاهای تصویری با استفاده از دو گام تقسیم بندی و شناخت به حل مسئله پرداخته می شود در اینجا نیز با کمک از این دو سعی در شکستن کپچاهای صوتی می شود. فراهم کردن داده: ابتدا یک نمونه ی 1000 تایی از فایل های صوتی کپچا جمع اوری شد سپس تعداد 900 فایل صوتی را تبدیل به سگمنت هایی با سایز ثابت کرده و که شامل اعداد بین 0-9 و حروف a-z می باشد و این سگمنت ها برای آموزش استفاده می شود. مرحله شناخت: برای شناخت کلمات و اعداد در فایل صوتی از سه الگوریتم زیر استفاده می شود: 1- AdaBoost 2- SVM 3-k-NN انواع کپچاهای صوتی: 1-google audio captcha: شامل یک بلندگو می باشد که اعداد رندوم بین 0-9 می گوید و در پس زمینه آن صدای انسان با volume های مختلف استفاده شده است. جدول شکسته شدن این کپچاها با الگوریتم های پیشنهادی به شکل زیر می باشد: 2-Digg captcha: مانند قبلی شامد یک بلندگو می باشد که ترکیبی از اعداد و حروف را می گوید و در پس زمینه آن صداهایی مانند چکیدن آب ... موجود است که این نویز ها در کل فایل پیوسته نیستند. جدول شکسته شدن digg captcha: 3-recaptcha audio: شامل چند نوع بلند گو میباشد که اعداد را بصورت رندوم می گویند و در پس زمینه آن صدای انسان با volume های مختلف پخش می شود [3] ******2-****Recaptcha** recaptcha نوعی دیگر از کپچا است که با در نظر داشتن دو هدف زیر ارائه داد: 1- حداقل رساندن تلاش و زمان شکستن کپچا کاربران مشروع 2- کامپیوتر ها نیاز به تکنیک های پیشرفته تری نسبت به شناسایی متن باید داشته باشند. به گفته گوگل recaptcha نسبت دارای ویژگی های کاربرپسند و امنیت بالا نسبت به کپچاهای قبلی می باشد. به بررسی ساختار recaptcha می پردازیم: ویجت: ویجت زمانیکه که لود می شود مجموعه ای اطلاعات را درباره ی مرورگر کاربر به سرور می فرستد و سرور یک سری چک برای تایید مرورگر کاربر انجام می دهد. روش کار به چه صورت است!!! کاربر زمانیکه checkbox را کلیک میکند در خواستی حاوی اطلاعات زیر به گوگل فرستاده می شود 1- Referrer (ارجاع دهنده) 2- Sitekey ( هنگام ثبت نام در کپچا به سایت داده می شود) 3- کوکی برای سایت گوگل 4- اطلاعاتی که بدست آمده توسط ویجت سپس درخواست توسط advanced risk analyses system که با بررسی تاریخچه مروگر , محیط مرورگر , الگوی حرکتی موس و .... تصمیم میگیرد چه نوع کپچایی را برای کاربر به نمایش بگذارد. چالش های ریکپچا: 1- اگر یک کاربر مشهور باشید سیستم کپچا را حل شده در نظر گرفته و کاربر پذیرفته می شود. 2- نمایش عکس: بصورت عمومی دارای یک عکس نمونه و نه عکس کاندید می باشد که کاربر باید عکس هایی را که از نظر معنایی شبیه به عکس نمونه هستنند را انتخاب کند. تعداد عکس های مرتبط در اکثر موارد بین 2-4 می باشد. 3- متن ریکپچا: اگر سیستم شما را به عنوان یک کاربر مشکوک شناسایی کند آنگاه چالش تشخیص متن را برای شما در نظر میگیرد. برای شکستن چالش دوم میتوان از کتابخانه و الگوریتم های زیر کمک گرفت:[4] GRIS 2-clarifai 3-TDL 4-NuralTalk 5- Caffe با استفاده از الگوریتم های فوق تا درصد بالایی از کپچاها شکسته می شوند. **-کپچافا:** کپچافا یک کپچای فارسی می باشد که بجای وارد کردن حروف بی معنی لاتین می توان از کلمات معنی دار فارسی با حداقل کجی و ناواضحی استفاده کرده است. استفاده از این نوع کپچا را به توسعه دهندگان وب فارسی پیشنهاد میشود زیرا: – تکنولوژی بازشناسی خودکار متون برای زبان لاتین بسیار پیشرفته است به صورتی که در حال حاضر ربات هایی وجود دارند که بر اساس الگوریتم های پردازش تصویر و شناسایی الگو میتوانند بسیاری از کپچاها را تشخیص دهند. نمونه هایی از عملکرد این ربات ها را می توان روزانه در بخش نظرات سایت های پر مخاطب و قدرتمندی مثل یاهو نیز مشاهده کرد. علاوه بر ساختار زبان و لغات فارسی که امکان ایجاد کپچافاهای پیچیده تری را نسبت به زبان لاتین ایجاد می کند، تکنولوژی بازشناسی خودکار متن ها نیز در بستر زبان فارسی بسیار ضعیف و نوپا است. – این سرویس کاملا رایگان بوده و کاربران می توانند بدون اینکه هیچ هزینه ای پرداخت کنند سایت، وبلاگ و یا پورتال خود را ایمن کنند. – برخلاف کپچا که به دلیل حملات رباتهای اینترنتی مبتنی بر دیکشنری، مجبور می شود که همیشه از لغات بی معنی استفاده کند، در کپچافا با تکیه بر سطح بالای امنیت ارائه شده، می توان از لغات معنی دار فارسی استفاده کرد. چون خطراتی که کپچا را تهدید می کنند در حال حاضر برای کپچافا وجود ندارند. نکته قابل توجهی که این ویژگی خاص کپچافا دارد راحتی و آسان خواندن کپچافا برای کاربر است. چرا که حتی با وجود ایجاد کجی ها و نا واضحی ها، انسان هوشمند با توجه به دایره لغاتی که در ذهن دارد می تواند به راحتی کپچافا را تشخیص دهد. در نتیجه، وضعیت آزار دهنده ای که کاربران برای خواندن کپچاها دارند در مورد کپچافا پیش نمی آید. – چهارمین دلیل که بر اساس آن تیم فنی کپچافا کاربران را تشویق می کند تا از کپچافا استفاده کنند پاس داشتن ادبیات و زبان خودمان است.[5] # آزمایشها # کارهای آینده # مراجع 1-http://www.captcha.net/ 2-https://websima.com/captcha-%DA%A9%D9%BE%DA%86%D8%A7/ 3-http://www.captcha.net/Breaking_Audio_CAPTCHAs.pdf 4-https://www.blackhat.com/docs/asia-16/materials/asia-16-Sivakorn-Im-Not-a-Human-Breaking-the-Google-reCAPTCHA-wp.pdf 5-https://click.ir/1395/07/14/persian-captcha-was-born/ # پیوندهای مفید + [کتابخانه اپنسیوی](http://opencv.org/) + [اپنسیوی در پایتون](http://docs.opencv.org/trunk/doc/py_tutorials/py_tutorials.html) + [بینایی کامپیوتری در جاوا اسکریپت](http://inspirit.github.io/jsfeat/) +[شبکههای عصبی در جاوا اسکریپت](https://github.com/harthur/brain) + [شبکههای عصبی کانلوشنال در جاوا اسکریپت](https://github.com/karpathy/convnetjs) + [یک منبع خوب](http://stackoverflow.com/questions/9413216/simple-digit-recognition-ocr-in-opencv-python) + [پیادهسازی svm در جاوا اسکریپت](https://github.com/karpathy/svmjs) + [پایگاه داده نمونه](http://www.cs.cmu.edu/~guestrin/Class/10701/projects.html#image)