{VERSION 3 0 "IBM INTEL NT" "3.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Heading 1" 0 3 1 {CSTYLE "" -1 -1 "" 1 18 0 0 0 0 0 1 0 0 0 0 0 0 0 }1 0 0 0 8 4 0 0 0 0 0 0 -1 0 }{PSTYLE "Heading 2" 3 4 1 {CSTYLE "" -1 -1 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 8 2 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Out put" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE " " 3 256 1 {CSTYLE "" -1 -1 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 4 257 1 {CSTYLE "" -1 -1 "" 1 18 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 39 "Voici un syst\350me de codage d e type RSA." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "commencer:" }}} {SECT 1 {PARA 257 "" 0 "" {TEXT -1 16 "Choix des clefs:" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 84 "Cette premi\350re partie est destin\351e \+ a vous permettre de trouver vos clefs de codages." }}}{EXCHG {PARA 0 " " 0 "" {TEXT -1 124 "Pour pouvoir communiquer en s\351curit\351 avec v otre interlocuteur il vous faut trois \"clefs\" qui sont en fait de gr ands nombres." }}{PARA 0 "" 0 "" {TEXT -1 95 "Deux de ces nombres doiv ent \352tre communiqu\351s \340 votre interlocuteur pour lui permettre de coder." }}{PARA 0 "" 0 "" {TEXT -1 94 "Attention : La troisi\350me doit rester secr\350te, gardez la pr\351cieusement, elle permet de d \351coder." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 306 "choix_des_cl efs:=proc()\nlocal x,e,p,q,phi,i;\nx:=rand(1..10);\ne:=ithprime(x()); \nprint(`e vaut :`,e);\nx:=rand(10^49..10^51);\np:=nextprime(x());\nq: =nextprime(x());\nprint(`n vaut :`,p*q);\nphi:=(p-1)*(q-1);\ni:=1;\nwh ile (phi mod e)-1<>(phi mod e)*i mod e do\n i:=i+1;\nod;\nprint(`d v aut :`,((i-1)*phi+1)/e);\nend:" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 47 "Attention : le calcul suivant peut \352tre long..." }}{PARA 0 "" 0 " " {TEXT -1 138 "S'il semble vraiment trop long (plus d'une minute) vou s pouvez l'interrompre en cliquant sur \"STOP\" dans la barre d'outils et recommencer." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "choix_d es_clefs();" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$%)e~vaut~:G\"\"(" }} {PARA 11 "" 1 "" {XPPMATH 20 "6$%)n~vaut~:G\"aqfqCef_@+:F(eD0[wG-gUg(* )p?gN*\\YxLn,\">=!f'\\S-TDMkC*ewjNy$" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6$%)d~vaut~:G\"aq(opGBiT\")Q*\\?/lo._Brt-Ao`V?NG/2DNLu>0SZG(\\Je$Q=k#) =#=53\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 112 "On obtient ainsi les \+ clefs publiques que sont les nombres e et n qu'il vous faudra donner \+ \340 votre interlocuteur." }}{PARA 0 "" 0 "" {TEXT -1 59 "Egalement vo us avez la clef secr\350te d qui vous faut garder." }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 92 "Les clefs que vous avez ainsi trouv\351es peuvent \352tre r\351utilis\351es plusieurs fois sans risques." }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 12 "Codage RSA :" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 100 "Pour pouvoir utiliser ce programme il vous faut executer toutes les lignes de calcul \340 partir d'ici." }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 8 "restart;" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 160 "Ceci permet \340 la machine d'oublier tous les calculs et les aff ectations effectu\351es auparavant qui pourraient interragir avec le c odage et entrainer des erreurs." }}}{SECT 1 {PARA 256 "" 0 "" {TEXT -1 24 "Proc\351dures n\351c\351ssaires :" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 92 "Ces proc\351dures vous serons n\351c\351ssaires pour pass er de nombre \340 lettre et de lettre \340 nombre." }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 50 "Ce premier calcul est un peu long (c'est normal!) ." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 1302 "alphabet:=abcdefghij klmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:\nnb_lettres:=length(alphab et):\nfor ni to nb_lettres do\n lettre[ni]:=substring(alphabet,ni. .ni) od:\nlettre[0]:=` `:\nlettre[53]:=`\340`:\nlettre[54]:=`\351`:\nl ettre[55]:=`\350`:\nlettre[56]:=`\371`:\nlettre[57]:=`.`:\nlettre[58]: =`,`:\nlettre[59]:=`;`:\nlettre[60]:=`:`:\nlettre[61]:=`?`:\nlettre[62 ]:=`/`:\nlettre[63]:=`-`:\nlettre[64]:=`(`:\nlettre[65]:=`)`:\nlettre[ 66]:=`+`:\nlettre[67]:=`*`:\nlettre[68]:=`=`:\nlettre[69]:=`0`:\nlettr e[70]:=`1`:\nlettre[71]:=`2`:\nlettre[72]:=`3`:\nlettre[73]:=`4`:\nlet tre[74]:=`5`:\nlettre[75]:=`6`:\nlettre[76]:=`7`:\nlettre[77]:=`8`:\nl ettre[78]:=`9`:\nlettre[79]:=`&`:\nlettre[80]:=`~`:\nlettre[81]:=`\343 `:\nlettre[82]:=`\365`:\nlettre[83]:=`\361`:\nlettre[84]:=`\"`:\nlettr e[85]:=`#`:\nlettre[86]:=`'`:\nlettre[87]:=`\{`:\nlettre[88]:=`\}`:\nl ettre[89]:=`[`:\nlettre[90]:=`]`:\nlettre[91]:=`!`:\nlettre[92]:=`\247 `:\nlettre[93]:=`@`:\nlettre[94]:=`_`:\nlettre[95]:=`>`:\nlettre[96]:= `^`:\nlettre[97]:=`\342`:\nlettre[98]:=`\352`:\nlettre[99]:=`\356`:\nl ettre[100]:=`\364`:\nlettre[101]:=`\373`:\nlettre[102]:=`\250`:\nlettr e[103]:=`\344`:\nlettre[104]:=`\353`:\nlettre[105]:=`\357`:\nlettre[10 6]:=`\366`:\nlettre[107]:=`\374`:\nlettre[108]:=`\243`:\nlettre[109]:= `$`:\nlettre[110]:=`\244`:\nlettre[111]:=`\265`:\nlettre[112]:=`<`:\nl ettre[113]:=`\347`:\nnn:=114:\nfor ni from 0 to nn do\n image_lett re[lettre[ni]]:=ni od:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 161 " code:=proc(exp)\nlocal ni,res,element;\nres:=0;\nfor ni to length(exp) do\n element:=image_lettre[substring(exp,ni..ni)];\n res:=res+ele ment*(nn)^(ni-1);\nod;\nend:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 122 "decode:=proc(nb)\nlocal ni,liste;\nliste:=convert(nb,base,nn); \nseq(lettre[ni],ni=liste);\ncat(seq(lettre[ni],ni=liste));\nend:" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 255 "expomodulaire:=proc(m,e,n) \nlocal L,i,facteur,res;\nL:=convert(e,base,2);\nfacteur:=m mod n;\nif L[1]=1 then\n res:=m;\n else res:=1;fi;\nfor i in subsop(1=NULL,L ) do\n facteur:=facteur^2 mod n;\n if i=1 then\n res:=(res*fa cteur) mod n;fi;\nod;res;\nend:" }}}}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 16 "Proc\351dures RSA :" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 76 "Et voic i enfin les proc\351dures de codage et de d\351codage RSA \340 proprem ent dit." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 211 "codersa:=proc( mot,k,n)\nlocal m,i,c;\nc:=0;\nm:=code(mot);\nm:=convert(m,base,n);\nf or i from 1 to nops(m) do\n m[i]:=expomodulaire(m[i],k,n);\nod;\nfor i from 1 to nops(m) do\n c:=c+m[i]*n^(i-1);\nod;\ndecode(c);\nend: " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 224 "decodersa:=proc(mot,k, n)\nlocal m,p,i,d;\np:=array;d:=0;\nm:=code(mot);\nm:=convert(m,base,n );\nfor i from 1 to nops(m) do\n p[i]:=expomodulaire(m[i],k,n);\nod; \nfor i from 1 to nops(m) do\n d:=d+p[i]*n^(i-1);\nod;\ndecode(d);\n end:" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 28 "Voici comment les utilise r :" }}{PARA 0 "" 0 "" {TEXT -1 37 "> codersa( `texte \340 coder` , e \+ , n );" }}{PARA 0 "" 0 "" {TEXT -1 41 "> decodersa( `texte \340 d\351c oder` , d , n );" }}}}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 27 "Messages co d\351s et d\351cod\351s :" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 89 "Il fa ut penser \340 mettre votre texte entre cotes ` accessibles au clavier par \"AltGr ; 7\"." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 181 "cod ersa(`Reportez ci-contre, dans la proc\351dure \"codersa\", les clefs \+ de votre correspondant, et vous pourrez ainsi coder un texte avant de \+ l'envoyer.`,37,97054091590498474630680497);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#%fs|^u^6Su|dy\"PGS[y.vf|cyB|bye!+o*|^y_2K|fr3a1U|buw-v| _y[|`zr3|by.&|hrQ|gz;H|_z8O,~|_yj~d:$|frY)WG;ec'G+x6aXU " 0 "" {MPLTEXT 1 0 67 "decodersa(%,393462533474913 93820272793,97054091590498474630680497);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%fsReportez~ci-contre,~dans~la~proc|dydure~\"codersa\",~les~clef s~de~votre~correspondant,~et~vous~pourrez~ainsi~coder~un~texte~avant~d e~l'envoyer.G" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 54 "Egalement pour d \351coder un message que vous avez recu :" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 197 "codersa(`Lorsque vous recevez un message cod\351, \+ mettez-le, entre cotes, dans la proc\351dure \"decodersa\" avec votre \+ clef secrete et vous obtiendrez le message en clair.`,37,9705409159049 8474630680497);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#%`u6JZ|cuL|iyo|\\zt |^u,|ey3EAH0*:iG@6qNAC**j|_uV'~MbS|ir&\"|gz|`vy|_yx&n#Hp!YI!xt|bu|ey|e yOY|ey#Tx6mA|irW|az0nB.wS>bG#bC|bu,|`v|^uZ|fr[|dy|ey|[y|dz@|dzAp>XR7kS r|^u/|gzc2FcP|but|iy|buj|_z_$|eygPl|_uda|`v<8x|`viWX15kT)z/fQ|[yxF|]y| irnOU^|]yx9R0C$~ydaG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 233 "de codersa(`6JZ\250L\356o\361t\243,\3523EAH0*:iG@6qNAC**j\244V' MbS~&\" \374\265y\344x&n#Hp!YI!xt\247\352\352OY\352#Tx6mA~W\3660nB.wS>bG#bC \247,\265\243Z\{[\351\352\340\371@\371Ap>XR7kSr\243/\374c2FcP\247t\356 \247j\364_$\352gPl\244da\265<8x\265iWX15kT)z/fQ\340xF\342~nOU^\342x9R0 C$ yda`,39346253347491393820272793,97054091590498474630680497);" }} {PARA 12 "" 1 "" {XPPMATH 20 "6#%ftLorsque~vous~recevez~un~message~cod |dy,~mettez-le,~entre~cotes,~dans~la~proc|dydure~\"decodersa\"~avec~vo tre~clef~secrete~et~vous~obtiendrez~le~message~en~clair.G" }}}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 10 "A propos :" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 25 "Programmes cr\351\351s en 2000." }}{PARA 0 "" 0 "" {TEXT -1 21 "Par Damien Faucillon." }}{PARA 0 "" 0 "" {TEXT -1 30 "Fichier c r\351e en d\351cembre 2000." }}{PARA 0 "" 0 "" {TEXT -1 41 "Derni\350r e mise \340 jour le 22 d\351cembre 2000." }}}}}{MARK "2" 0 }{VIEWOPTS 1 1 0 1 1 1803 }