代写CYBR 372 Applications of Cryptography调试Java编程

CYBR 372 Applications of Cryptography

Te Aromatawai Tuatahi--Assignment 1

Ngā Whāinga --Objectives

In  this  assignment,you  will  learn  how  to  use  the  Java  Cryptography  Extension(JCE)to:

perform.   symmetric   encryption   and   decryption

■use password-based   key   derivation    for    encryption/decryption

■evaluate  the  effect of  different   parameters  of  encryption  on   its  overhead

■   implement   a   brute-force   attack

Te Whakariterite--Preparation

This  is  based  upon  the following  resources, note  that  some  are  from  O'Reilly  (Safari  books  online)and require you to initially access  them via the  library  and  create  an account.

O'Reilly videos that  provide a great  hands-on  introduction  to the JCE:

Basic   Encryption  with  Symmetric  Ciphers(6   minutes,42  seconds)video,code Encrypting   and   Decrypting   Files(8   minutes,20   seconds)video,code

Common  Security  Flaws  When  Using  Symmetric  Ciphers(6  minutes,20  seconds) video

Note that the code above uses a Util class available from here.

Oracle  provides  these  useful  reference  materials  that  will  help  with  completing  the  assignment:

Java    Cryptography    Architecture(JCA)Reference    Guide

Java""Crvptoqraphv Architecture   Standard   Alqorithm   Name Documentation

What to Submit?

Submit  a  zip  file  containing  a  directory  for  each  part  (i.e.part1,part2,part3,and  part4).Each subdirectory  should  contain  the  following:

Code:

o  Must  also  have  standard  comments  to  help  the  marker  understand  your  code.

o  The  code  should  output  human-readable  error  messages  that  will  help  users  correct  their mistakes  rather  thanjust  providing  a  stack  trace.

■A  file  named   README.md  listing  any   references  used,and  optionally,explaining  your  design choice and explaining why  it  is secure and  how  it  meets the  requirement.

■For  part3,it  should  also  have the  raw  results  of  vour  timing  experiments  saved  as  either

results.csv,results.json,or   results.xml    file.Moreover,you    should   also    include    a    file

report.pdf   where    you    presentand  discuss  your  findings.The  pdf  file  should  clearly  have  your

assignment1

s r c

-- part1

-- README.md --  Part1.java -- Util.java

-- part2

-- README.md --Part2.java —- Util.java

part3

--README.md

--results.cSv --report.pdf

--Part3.java

--Util.java part4

--README.md

-- Part4.java --Util.java

Part  1:Perform.  symmetric  encryption  and  decryption (25%)

Extend the existing FileEncryptor.java to allow the user to specify: Encryption  or  decryption  operation.

■Secret key and initialisation vector (IV)in  Base64 encoding as input files. ■AES  mode  of  operation.

Input file(path  and  name).   ■Output  file(path   and   name).

The encryption operation is indicated by the keyword enc and the decryption operation is indicated

by the keyword dec.This is a mandatory parameter,and always appears first.

The other parameters are not positional (can appear in any order).They are identified by their name.

Si e,cike(fic)y(a)ll-yfi(:)le:what  comes  after  is  interpreted  as  the  path  to  the  file  containing  the  secret  key

(in Base64 encoding).This parameter isoptional for encryption but is mandatory for decryption.

If this option is not provided (for encryption),then a secret key is randomly generated and used,

■ -iv,--initialisation-vector:what comes after is interpreted as the path to the file  vector    is    randomly    generated    and    used,which    is    also    saved     in    a    file    iv.base64    encoded    in

(ECB/CBC/CTR/OFB/CFB/GCM).This is an_optional parameter.If not provided,the default of   AES/CBC/PKCS5PADDING      should      be      used.For      padding,use       the      same      PKCS5PADDING       for      other modes too.

-i,--input-file:this  is  a  mandatory  parameter.For  enc,this  the  file  containing  the  data  to  be

encrypted(the  plaintext).For  dec,this  is  the  file  containing  the  encrypted  data(thē  ciphertext).

■  -o,--output-file:this   is   an   optional   parameter.For   enc,this   the   file  will   contain   the

encrypted    data,for    dec,this     is    the    file     containing    the    decrypted    data.If    this     option    is     not

message.txt.enc,becomes       message.txt.dec,and        message.dat       becomes        message.dat.dec.

Some     example     usage:

java         Part1         enc         --input-file         plaintext.txt         —output-file         ciphertext.enc

java Part1 enc -i plaintext.txt -o ciphertext.enc

java Part1 enc -o ciphertext.enc -i      plaintext.txt

java Part1 enc -i plaintext.txt

java     Part1      enc      -i      plaintext.txt      -o      ciphertext.enc      -k      key.base64-m      GCM

java Part1       enc       -iv       iv.base64-m       CFB-i       plaintext.txt       -o       ciphertext.enc

java Part1 dec        --input-file ciphertext.enc        -o       plaintext.txt

java      Part1       dec      -i       ciphertext.enc       -o      plaintext.txt       -m       OFB-k      key2.base64-iv       iv3.base64

Part 2:Password-Based Key Derivation for encryption/decryption (25%)

Keys are hard to remember by humans so using a password is a work-around option.The password

can be used to generate a key using a secure password-based key derivation function like Password-

Based Key Derivation Function 2(PBKDF2).They involve adding "salt"and iteratively apply a hash

function.Java provides implementation of key derivation functions to make this easy,see here for a

code example. This follows  NIST  recommendations(found  here PBKDF2 and here RFC2898 ).You

should also readthe OWASP advice on password storage.

This requires adding an option to our file encryptor to allow a password to be specified instead of a

key,designated  byā  named  parameter  -p  or  --pass.You  should  also  output(print)the  secret  key

and   the   IV   as   generated   from   the    password   in    base64   encoding   for   marking    purposes.Use   the

default  AES/CBC/PKCS5PADDING  mode  with  key-length  of  128  bits  for  encryption.

Some examples:

java

Part2

enc

--pass

"my password"-i plaintext.txt

-o ciphertext.enc

java

Part2

dec

-p"my

password"-i ciphertext.enc -o

plaintext.txt

Note that the decryption worked without providing the password salt.In your readme file of this part,

Note: For this part,your code must not create any new files,e.g.,it should not save the key to a file,

or the IV,or the sait,etc.Anything that is needed (excluding the key!duh!)can be put in the header of

the ciphertext itself(we do this trick all the time with almost any file format:we put necessary

information to read the file in its header).

Part 3:Evaluation of Parameters on Performance

(25%)

Use the code in part 1 to evaluate the effect of the following parameters on the runtime of encryption and      decryption:

■   Key   length(128/192/256) ■Mode   of   operation

■Size of  the  plaintext  file

Keep the following notes in mind:

Make   sure   you   are   only    measuring   the   time   it   takes   for   the   actual   encryption(and   decryption),

and   not  the   reading   of  the   input  file  and  writing  of  the  output  file  to  disk(reading  and  writing  from storage   is   slow,and   may   skew   the   results).

among multiple processes).So make sure you are not reporting based only on single measurements.

Record your  measurements  in  a  csv  (or  json,or  xml)file  results.csv  in  the  same  directory.The fields should be explained in the readme file.

Provide a  report  in  pdf  report.pdf  including  a  presentation  and  discussion  of  your findings.This

report is strictly limited to 5001000 words (excluding your references)and the values reported

should match your results file.

You do not need to provide the reasoning behind your observations,just a description of patterns

and your take-home lessons/recommendations.

Part 4:Brute-Force Attack(25%)

If we wanted to launch a brute-force attack on the AES directly,it will be impossible,because even for

128-bit long key,the key-space size of 2^128 is too large to be brute-forced (it will take billions of

years on our best computers).However,when password-based key derivation is used,then the story

is different!Human-memorable  password  have  much  less  'entropy":Small  passwords  are  doomed

even more,because they can be brute-forced,as you are asked to show here.

Assume the password is limited to at most 6 characters long.Write a code that can decrypt a

ciphertext  by  brute-force(without  knowing  the  key).The  ciphertext  is

■the first parameter is a mandatory positional parameter which is the ciphertext file.

the second parameter is a mandatory named argument using the keyword -t or --type followed  by  a  number(0/1/2)with  the  following  interpretation:

o 0:password  is at  most 6 characters  long,composed only of lowercase  letters.

o1:password is at most 6 characters long,composed only of lowercase letters and numbers.

o 2:password is at most 6 characters long,composed only of lowercase and uppercase letters.

It should print the password (and nothing else)once it is found. Here are some example usages:

java java

Part4 Part4

ciphertext.enc     -t0 ciphertext.enc    -t 1

java

Part4

ciphertext.enc -t 2

Use your implementation to estimate the time it takes to crack a sample ciphertext for each of these

various types,and report it in your readme file of this section.




热门主题

课程名

mktg2509 csci 2600 38170 lng302 csse3010 phas3226 77938 arch1162 engn4536/engn6536 acx5903 comp151101 phl245 cse12 comp9312 stat3016/6016 phas0038 comp2140 6qqmb312 xjco3011 rest0005 ematm0051 5qqmn219 lubs5062m eee8155 cege0100 eap033 artd1109 mat246 etc3430 ecmm462 mis102 inft6800 ddes9903 comp6521 comp9517 comp3331/9331 comp4337 comp6008 comp9414 bu.231.790.81 man00150m csb352h math1041 eengm4100 isys1002 08 6057cem mktg3504 mthm036 mtrx1701 mth3241 eeee3086 cmp-7038b cmp-7000a ints4010 econ2151 infs5710 fins5516 fin3309 fins5510 gsoe9340 math2007 math2036 soee5010 mark3088 infs3605 elec9714 comp2271 ma214 comp2211 infs3604 600426 sit254 acct3091 bbt405 msin0116 com107/com113 mark5826 sit120 comp9021 eco2101 eeen40700 cs253 ece3114 ecmm447 chns3000 math377 itd102 comp9444 comp(2041|9044) econ0060 econ7230 mgt001371 ecs-323 cs6250 mgdi60012 mdia2012 comm221001 comm5000 ma1008 engl642 econ241 com333 math367 mis201 nbs-7041x meek16104 econ2003 comm1190 mbas902 comp-1027 dpst1091 comp7315 eppd1033 m06 ee3025 msci231 bb113/bbs1063 fc709 comp3425 comp9417 econ42915 cb9101 math1102e chme0017 fc307 mkt60104 5522usst litr1-uc6201.200 ee1102 cosc2803 math39512 omp9727 int2067/int5051 bsb151 mgt253 fc021 babs2202 mis2002s phya21 18-213 cege0012 mdia1002 math38032 mech5125 07 cisc102 mgx3110 cs240 11175 fin3020s eco3420 ictten622 comp9727 cpt111 de114102d mgm320h5s bafi1019 math21112 efim20036 mn-3503 fins5568 110.807 bcpm000028 info6030 bma0092 bcpm0054 math20212 ce335 cs365 cenv6141 ftec5580 math2010 ec3450 comm1170 ecmt1010 csci-ua.0480-003 econ12-200 ib3960 ectb60h3f cs247—assignment tk3163 ics3u ib3j80 comp20008 comp9334 eppd1063 acct2343 cct109 isys1055/3412 math350-real math2014 eec180 stat141b econ2101 msinm014/msing014/msing014b fit2004 comp643 bu1002 cm2030
联系我们
EMail: 99515681@qq.com
QQ: 99515681
留学生作业帮-留学生的知心伴侣!
工作时间:08:00-21:00
python代写
微信客服:codinghelp
站长地图