نرم افزار رای گیری آنلاین UML بخش شانزدهم
اثبات هويت سرور
آنچه در اين مرحله انجام مي شود دقيقا همان کار مرحله قبل است که در جهت مخالف صورت مي پذيرد . البته اين بار در صورت عدم احراز هويت سرور ،يک مشکل تشخيص داده شده و از طريق صفحه پانل کنترل براي Admin سرور پيغامي ارسال مي گردد که نشانگر بروز مشکل در تاييد صلاحيت است . و توسط Admin اصلاح تنظيمات به شکلي صورت مي گيرد که اين مشکل مرتفع شود .
تمهيدات اثبات هويت سرور
در اين مرحله همچون آنچه در تمهيدات احراز هويت کاربر انجام شد ولي اينبار بر عکس انجم مي شود . رمز گشايي رشته رمز شده توسط کليد خصوصي و ديگر عمليات در اين مرحله صورت مي پذيرد .
دريافت نتيجه تاييد هويت
در اين گذر نتيجه تاييد هويت در قلب پيامي از طرف کاربر فرستاده شده و توسط سرور دريافت مي شود ف اين نتيجه مستقيما به پيمانه بالا يعني پيمانه اثبات هويت سرور فرستاده مي شود تا براساس اين نتيجه تصميم گيري در مورد انتقال کنترل صورت پذيرد .
قالب پيغامي که در اين مرحله رد و بدل مي شود نيز از استاندارد مرحله قبلي تبعيت مي کند . اين قالب در قسمت ساختمان داده هاي طراحي تشريح مي گردد .
اعلام بروز اشکال هويت
در صورتي که اشکالي در تاييد هويت بروز کند ، کنترل به اين قسمت منتقل مي شود که در آن با واسط Admin ارتباط برقرار شده و بروز مشکل و نوع آن نشان داده مي شود . سپس انتقال کنترل به مرحله انتظار براي کاربر جديد انجام مي شود .
چند نکته مهم در مورد اين طراحي وجود دارد :
1) اثبات هويت سرور و احراز هويت کاربر که در دو پيمانه جداگانه تفکيک شده است ، معمولا به شکل منفک از هم انجام نمي شود . اين دو مرحله يا به صورت همروند با هم انجام مي شوند ويا در قالب يک پيمانه با هم ترکيب خواهند شد . ما در طراحي موله اي ين دو پيمانه را در هم ادغام مي کنيم و صورت کلي سلسله مراتب پيمانه ها را به شکل زير در مي آوريم .
احراز هويت کاربر و اثبات هويت سرور
تمهيدات احراز و اثبات هويت
ارسال نتيجه تاييد هويت
دريافت نتيجه احراز هويت کاربر
عدم تاييد هويت کاربر
اعلام بروز اشکال هويت سرور
اما در شکل عملياتي پيمانه ها تغييري حاصل نمي شود و گزارش عمليات صورت گرفته در انها به همين صورتي که در بالا ذکر شد خواهد بود .
2) احراز هويت مي تواند با استفاده از رمز نگاري کليد متقارن و يا نا متقارن صورت گيرد که اولي در مواردي کهامنيت راي گيري اهميتي به ندازه سرعت و کارايي برنامه ندارد و دومي در صورت نياز به امنيت بالا مورد استفاده قرار مي گيرد و تنظيم شکل Authentication در تنظيمات اوليه اي که توسط Admin صورت مي پذيرد انجام مي شود که الگوريتم رمز نگاري و احراز هويت را تعيين مي کند .
3)ياد آوري مي کنيم که کليه داده هاي ارسالي براي کاربر ، پس از اين مرحله قبل از ارسال از يک پيمانه رمز گذار عبور مي کنند که براي تضمين امنيت سيستم همه داده ها را به صورت رمز شده ارسال مي کند . اين رمز گذاري به صورت متقارن و با استفاده از کليدي که در مرحله احراز هويت ساخته مي شود ، انجام مي شود . همچنين از اين پس داده هاي دريافت شده از طرف کاربر نيز رمز شده است و براي رمز گشايي به اين پيمانه ارسال مي شود . اين پيمانه به منظور جلوگيري از ايجاد پيچيدگي و ابهام در DFD آورده نشده است .
4)تشکيل session ارتباطي با کاربر نيز در ان مرحله صورت مي گيرد و کليد session که همان کليد رمز گذاري داده است و تا پايان ارتباط با اين کاربر session ايجاد شده حفظ مي شود .
5)معماري کلي نرم افزار در سطح بالا از اين پس به شکل 3-5 تغيير مي کند ، که در آن مراحل ايجاد session و ... لحاظ شده است .
6) در صورت بروز هر گونه اشکال در اين پيمانه ها و پيمنه هاي ديگر ، کنترل به پيمانه بروز اشکال منتقل مي شود و session ختم شده ، و اعمال لازم در پيمانه بروز اشکال صورت مي گيرد و در نهايت اين پيمانه، اشکال را براي صفحه پانل کنترل مي فرستد و کنترل را به پيمانه انتظار براي کاربر جديد ، وامي گذارد .
راي گيري
ارسال اسامي نامزدها
اسامي نامزدها که توسط Admin تنظيم شده و ذخيره شده است از پايگاه داده خوانده مي شود و در قالب يک فايل XML به سمت کاربر ارسال مي شود .
دريافت نتيجه انتخاب نامزد
نتيجه انجام راي گيري در قالب يک راي که ساختار آن در قسمت بعد تشريح مي شود به سمت سرور فرستاده و سرور در اين پيمانه آنرا دريافت مي کند و راي را براي ثبت به پيمانه ثبت انتقال مي دهد .
ثبت نتيجه راي گيري
در اين پيمانه نتيجه راي گيري از کاربر در پايگاه داده آرا ثبت مي شود .
ارائه آمار
پس از ثبت نتيجه را گيري کاربر ماري که با لحاظ اين راي بدست آمده از پايگاه داده دريافت و هم براي کاربر و هم براي صفحه پانل کنترل سرور ارسال مي شود .
تنظيمات و رفع اشکال
در صورت بروز هر گونه اشکال admin شبکه مي تواند از طريق پانل کنترل تنظيمات را تغيير داده و اشکال را بر طرف کند . اين پيمنه که به صورت همروند با پيمانه انتظار براي کاربر جديد و راي گيري کاربر اجرا مي شود و تداخل عملياتي با انها ندارد .
رمز گذاري و رمز گشايي داده هاي ارسالي و دريافتي
همانگونه که گفتيم پس از ايجاد session جديد ، با استفاده از کليد نشست ايجاد شده در مرحله احراز هويت کليه داده هاي ارسالي و دريافتي در حين راي گيري از اين پيمانه که در واقع لايه آماده سازي (presentation) نرم افزار است عبور مي کند . تنظيم الگوريتمهاي مورد استفاده در اين پيمانه در ابتدا توسط Admin سرور انجام مي شود .
از آنجا که در حين طراحي تغييراتي در ساختار سلسله مراتبي پيمانه ها داده شد و شکل کلي معماري سرور بر اساس توضيحات تغير نمود ، شکل نهايي معماري سلسله نراتب پيمانه اي مناسب سيستم کارگزار (سرور) پس از ايجاد تغييرات به صورت زير در مي آيد:
سرور راي گيري الکترونيکي
تنظيم ليست نامزدها و تنظيمات اوليه
انتظار براي کاربر جديد
راي گيري کاربر
احراز هويت کاربر و سرور
تمهيدات احراز هويت
ارسال نتيجه احراز هويت کاربر
دريافت نتيجه احراز هويت سرور
عدم احراز هويت کاربر
اعلام بروز اشکال هويت
ايجاد session جديد براي کاربر
راي گيري
ارسال اسامي نامزدها
دريافت نتيجه راي گيري
ثبت نتيجه راي
ارائه امار و گزارش
خاتمه session
رمز گذاري و رمز گشايي داده هاي ارسالي و دريافتي
بروز اشکال
تنظيمات و رفع اشکال
نرم افزار کاربر راي گيري الکترونيکي
براساس تغييراتي که در طراحي معماري سرور داده شد ، مناسب است که در طراحي نرم افزار مشتري نيز تغييرات لازم را لحاظ کنيم تا همگوني طراحي بين اين دو به وجود آيد . ساختار سلسله مراتب پيمانه اي تغيير يافته طراحي نرم افزار مشتري به شکل 3-6 در خواهد آمد .
مشتري راي گيري الکترونيکي
برقراري ارتباط
احراز هويت کاربر و سرور
تمهيدات احراز هويت
دريافت نتيجه احراز هويت کاربر
ارسال نتيجه احراز هويت سرور
عدم احراز هويت کاربر
اعلام بروز اشکال هويت سرور
ايجاد session
فرايند راي گيري
دريافت اسامي نامزدها
انتخاب نامزدها
ارسال نتيجه راي گيري ( راي)
دريافت آمار آرا و خاتمه نشست
رمز نگاري و رمز گشايي داده هاي ارسالي و دريافتي
بروز اشکال
مشتري راي گيري الکترونيکي
برقراري ارتباط و Negotiation اوليه
در اين پيمانه با در خواست کاربر تقاضاي برقراري ارتباط با سرور صورت مي گيرد و در صورت پاسخ سرور يک ارتباط TCP بين مشتري و سرور برقرار مي گردد . ضمن برقراري ارتباط مذاکره اوليه در مورد قواعد رمز گذاري و احراز هويت در بين مشتري و کارگزار رد و بدل مي شود . ( يا به عبارت بهتر توسط سرور ارسال و توسط مشتري تصديق مي شود . ) اين قسمت ساختمان داده خاص خود را مي خواهد که هر دو طرف کدهاي مخصوص قرارداد شده براي هر الگوريتم را بدانند .
احراز هويت کاربر و سرور
در پيمانه احراز هويت ابتدا پيمانه تمهيدات فراخواني مي شود و در تعامل با کاربر با استفاده از کليد خصوصي کاربر و سرور هر دو احراز هويت مي شوند . الگوريتم احراز هويت در مرحله قبل ضمن مذاکرات اوليه تعيين شده است . پس از آن تابع دريافت نتيجه نتيجه احراز هويت کاربر را دريافت مي کند . بسته به اينکه هويت تاييد شده باشد يا نه مسير جريان برنامه تغيير خواهد کرد . چنانچه هويت تاييد شود ، کنترل به پيمانه ارسال نتيجه احراز هويت سرور و اگر تاييد نشود ، به پيمانه عدم تاييد هويت منتقل مي شود . پيمانه عدم تاييد هويت اين نتيجه را به اطلاع کارر مي رساند و کار را متوقف مي کند .
اگرنتيجه احراز هويت سرور نيز مردود باشد کار به پيمانه بروز اشکال هويت سرور سپرده شده و ادامه کار متوقف مي شود . تنها در صورتي که هر دو تاييد هويت شوند ، مسير اصلي برنامه به پيش مي رود و نتايج دو پيمانه قبل به دست پيمانه ايجاد نشست مي رسد تا با ترکيب انها کليد نشست را به وجود آورده نشست را آغاز کند .
جزئيات اين امور در قسمتهاي بعد مشخص خواهد شد . پيمانه هايي که در قسمت احراز هويت بکار گرفته مي شوند : تمهيدات احراز هويت ، دريافت نتيجه احراز هويت کاربر ، ارسال نتيجه احراز هويت سرور ، عدم احراز هويت کاربر ، اعلام بروز اشکال هويت سرور و ايجاد session خواهند بود .
فرآيند راي گيري
در قسمت فرايند راي گيري ابتدا تقاضاي ارسال اسامي نامزدها به سرور داده مي شود و نتيجه دريافتي آن که فايل XML حاوي مشخصات نامزدهاست ، براي کاربر نمايش داده مي شود . اين فرايند با احضار پيمانه دريافت اسامي نامزدها صورت مي پذيرد ، سپس پيمانه انتخاب نامزدها فراخواني مي شود که طي آن نامزد از ليست اسامي که پيش روي او قرار دارد ، اسامي منتخبين خود را انتخاب مي کند . اين نتيجه در يک قالب مشخص به نام راي سازماندهي مي شود و توسط پيمانه ارسال نتيجه راي گيري ( راي) اين راي بدست آمده به سمت سرور ارسال مي شود .
دريافت آمار آرا و خاتمه نشست
پس از آنکه عمليات راي گيري خاتمه مي يابد ، نتيجه انتخابات با لحاظ رايي که تازه ريخته شده براي کاربر نشان داده مي شود . و با تاييد کاربر کار خاتمه مي پذيرد .
رمز نگاري و رمز گشايي داده هاي ارسالي و دريافتي
همانگونه که در گزارش سرور نيز توضيح داده شد ، کليه نقل و انتقالات داده اي که پس از ايجاد نشست انجام مي شود ف به صورت رمز شده خواهد بود ، اين رمز نگاري و رمز گشايي در لايه اي جداگانه په در اينجا بهصورت يک پيمانه ارائه شده انجام مي شود .
بروز اشکال
در صورت بروز اشکال در هر مرحله کنترل با ارسال کدي که نشان دهنده نوع اشکال است به اين پيمانه منتقل شده و اين پيمانه با نوع اشکال را به اطلاع کاربر مي رساند .
تعريف واسط هر پيمانه
در اين مرحله به تعريف واسطهاي پيمانه ها مي پردازيم :
interface evoting_server
{
candidates candidate_list_configuration ();
algorithms initial_configuration();
new_user waiting_for_new_user();
user_voting( new_user , algorithms , candidates);
problem_occur(prblm_code);
configure_managemnt();
}
interface user_voting( new_user , algorithms , candidates )
{
session_key authentication( new_user , server , algorithms) ;
result voting( new_user , session_key , candidates );
(* this result is not vote , it is a message that show voting succed or not. *)
represent-statistics(session_key , new_user , server , //votes_DB );
session_end(session_key);
cryptotext cryptography(job, algorithms, plaintext );
}
interface authentication( new_user , server , algorithms )
{
result authenticatian_alg( algorithms, new_user, server);
send_result( result) ;
sar server_authentication_result_reseive();
user_authentication_problem( result);
server_authentication_problem( sar );
session_key session_maker(result,sar);
}
interface voting( new_user , session_key , candidates )
{
res send_condidates_list( candidates);
(* res show that module execute correct *)
vote reseive_voting_result(res);
register_vote( vote ) ;
}
interface evoting_client()
{
algorithms connect(server);
session_key authentication( client , server, algorithms );
voting(server , client , session_key);
statistic_receive( server . session_key);
end_session(server , session_key);
problem_occur( prblm_code);
cryptotext cryptography(job , algorithms , plaintext);
}
interface authentication(client , server , algorithms)
{
atn_res authentication_alg(algorithms, client , server);
rac receive_authentication_result();
send_server_authentication_result(atn_res);
client_auth_failed( rac );
server_auth_failed( atn_res );
session_key session_maker( rac , atn_res );
}
interface voting(servr , client , session_key)
{
candidate_list receive_candidate_information(server, session_key);
vote voter(candidate_list);
send_result( server , vote);
}