java cryptography

Click here to load reader

Upload: inga-cooke

Post on 01-Jan-2016

53 views

Category:

Documents


1 download

DESCRIPTION

JAVA Cryptography. 4 장 Random Number 프로그래밍 언어 실험실 석사 3 학기 박중기. 목차. SecureRandom Self-Seeding Keyboard Timing SeederDialog. Random Number. pseudo-random number: 필연적으로 주기성이 발생하는 난수 PRNG : pseudo-random number generator seed : 의사 - 난수를 발생시킬 때의 초기값. SecureRandom. - PowerPoint PPT Presentation

TRANSCRIPT

  • JAVA Cryptography4 Random Number

    3

  • SecureRandomSelf-SeedingKeyboard TimingSeederDialog

  • Random Numberpseudo-random number: PRNG : pseudo-random number generatorseed : -

  • SecureRandomjava.util.Random PRNG , , .

  • SecureRandom (contd)java.security.SecureRandom PRNG, JDK1.1 SHA-1 SecureRandom seed - , PRNG .

  • SecureRandom (contd)SecureRandom SecureRandom nextBytes() 100bytes - SecureRandom sr = new SecureRandom();byte[] pseudoRandom = new byte[100];sr.nextBytes(pseudoRandom);

  • SecureRandom (contd) SecureRandom constructors:public SecureRandom()SecureRandom seed public SecureRandom(byte[] seed) SecureRandom

  • SecureRandom (contd) , setSeed() SecureRandom public synchronized void setSeed(byte[] seed)SecureRandom - , nextBytes() public synchronized void nextBytes(byte[] bytes) -

  • Self-SeedingSecureRandom seed , . thread seed seed . () , .

  • Keyboard TimingSecureRandom seed . PGP(Pretty Good Privacy) keystroke , . .

  • SeederKeyEvents seed .Seeder . KeyListener interface package oreilly.jonathan.util;import java.awt.AWTEventMulticaster;import java.awt.event.*;public class Seeder implements KeyListener {

  • Seeder (contd) protected byte[] mSeed; //mSeed seed protected int mBitIndex; // protected boolean mDone; // seed indicate protected char mLastKeyChar; // // protected ActionListener mListenerChain; protected Counter mCounter; // //

  • Seeder (contd)public Seeder (int seedBytes) {reset(seedBytes);} // , reset() public void reset(int seedBytes) { mSeed = new byte[seedBytes]; mBitIndex = seedBytes * 8 -1; mDone = false; mLastKeyChar = '\0'; mListenerChain = null; // reset() Seeder

  • Seeder (contd) public byte[] getSeed() { return mSeed;} public int getBitLength() { return mSeed.length * 8;} // Seeder public int getCurrentBitIndex(){ return mSeed.length * 8 - 1 - mBitIndex; } //mBitIndex public void addActionListener (ActionListener al) { mListenerChain = AWTEventMulticaster.add(mListenerChain, al); } // seed public void removeActionListener (ActionListener al){ mListenerChain = AWTEventMulticaster.remove(mListenerChain, al); } // seed

  • Seeder (contd) public void keyPressed(KeyEvent ke) {} public void keyReleased(KeyEvent ke) {} public void keyTyped(KeyEvent ke) { char keyChar = ke.getKeyChar(); if (keyChar != mLastKeyChar) grabTimeBit(); mLastKeyChar = keyChar; }Seeder KeyListener . keyTyped() grabTimeBit()

  • Seeder (contd) protected void grabTimeBit() { if (mDone) return; int t = mCounter.getCount(); //Counter count int bit = t & 0x0001; //

    if (bit != 0) { int seedIndex = mBitIndex / 8; int shiftIndex = mBitIndex % 8; mSeed[seedIndex] |= (bit

  • Seeder (contd) mBitIndex--; if (mBitIndex < 0) { mCounter.stop(); mBitIndex = 0; // Reset this so getCurrentBitIndex() works. mDone = true; // seed if (mListenerChain != null) { mListenerChain.actionPerformed( new ActionEvent (this, 0, "Your seed is ready.")); } } } }

  • Seeder (contd)Seeder 3Seeder Seeder s = new Seeder(20);KeyEvents Seeder .theComponent.addKeyListener(s);ActionEvent s.addActionListener(this);

  • AWTEventMulticasterSeeder ActionListener , .AWTEventMulticaster listener , ActionListeners ActionLister . ActionListener mListenerChain .

  • PitfallsSeeder Counter Seeder . . ., interval , .

  • Pitfalls (contd)random . http://random.mat.sbg.ac.at/Salzbug, random http://www.cs.berkeley.edu/~daw/netscape-randomness.html, , , http://lavarand.sgi.com/Lava Lites

  • SeederDialogSeed SeederDialog sd = new SeederDialog(this, 20);sd.show();byte[] seed = sd.getSeed();

  • SeederDialog (contd)Source Codepackage oreilly.jonathan.awt;

    import java.awt.*;import java.awt.event.*;

    import oreilly.jonathan.util.*;

    public class SeederDialog extends Dialog implements ActionListener, KeyListener {

    ProgressBar mProgressBar; Seeder mSeeder;

    public SeederDialog(Frame parent, int seedBytes) { super(parent, "Seeder Dialog", true); setupWindow(seedBytes); }

  • SeederDialog (contd) public byte[] getSeed() { return mSeeder.getSeed(); } // Seeder seed

    public void actionPerformed(ActionEvent ae) { dispose(); } // Seeder ActionEvent .

    public void keyPressed(KeyEvent ke) {} public void keyReleased(KeyEvent ke) {} public void keyTyped(KeyEvent ke) { mProgressBar.setLevel(mSeeder.getCurrentBitIndex()); }

    source code