OpenSSL

python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
from OpenSSL.crypto import load_privatekey, FILETYPE_PEM, sign, load_publickey, verify, X509
from Crypto.Hash import SHA256 as SHA
from OpenSSL import crypto
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox
import sys
 
pkey = crypto.PKey()                      
pkey.generate_key(crypto.TYPE_RSA, 1024)                    #RSA 형식의 키 생성
 
# 공개키, 개인키 생성
with open("public.pem",'ab+') as f:
    f.write(crypto.dump_publickey(crypto.FILETYPE_PEM, pkey))
 
with open("private.pem",'ab+') as f:
    f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, pkey))
 
# 공개키, 개인키 읽어오기 
with open("private.pem",'rb+') as f:                                     
    priv_key = crypto.load_privatekey(crypto.FILETYPE_PEM, f.read())
 
with open("public.pem",'rb+') as f:
    pub_key = crypto.load_publickey(crypto.FILETYPE_PEM, f.read())
    
# 데이터 해시화 
content = '_message'                                         #가져와야 하는것
_hash = SHA.new(content.encode('utf-8')).digest()            # 데이터 해시화 = 프레임 해쉬화 데이터로 대체할 것
 
#개인키로 전자서명
_sig =  sign(priv_key, _hash, 'sha256')                     # 개인키로 해시화 되어 있는걸 전자서명
 
 
x509 = X509()                                              # 인증서를 사용할 수 있도록 하는 메서드 제공
x509.set_pubkey(pub_key)
 
#비교 대상
cc2 = '_message'
t_hash = SHA.new(cc2.encode('utf-8')).digest()
 
#verify(x509, 전자서명, 비교할 해시, 'sha256')
 
 
try :
    verify(x509, _sig, t_hash, 'sha256')
    app = QtWidgets.QApplication(sys.argv)
    QMessageBox.information(None,'Success!',u"변조되지않았습니다.",QMessageBox.Ok)
    sys.exit(1)
except :
    app = QtWidgets.QApplication(sys.argv)
    QMessageBox.critical(None,'Error!',u"변조되었습니다.",QMessageBox.Ok)
    sys.exit(1
 
 
 
cs

python


공개키 개인키
crypto.dump_publickey(crypto.FILETYPE_PEM, pkey)로 ".pem" 파일을 생성하여 이곳에 저장 후 crypto.load_publickey(crypto.FILETYPE_ASN1, pkey)로 불러옴

만약, ".pem" 파일에 저장하지 않고 바로 쓸거면  crypto.load_publickey(crypto.FILETYPE_ASN1, pkey)로 바로 가져오면 OK

전자서명

sign(개인키, 해시화 한 데이터, 'sha256')

증명
vertify(x509, 해시화한 원 데이터, 비교할 해시 데이터, 'sha256')

※ 증명 시 주의할 점
데이터 변조 시 파일 자체의 에러가 나기에 예외 처리문을 이용하여 원 데이터가 비교할 데이터와 다를 경우 원하는 메시지를 출력하도록 함

위의 코드에서는 PyQt를 사용하여 메시지 박스가 생성되도록 만듦

Tokyo Story NO.2


'공부 > Python' 카테고리의 다른 글

[DB] INT 형 삽입  (0) 2020.03.21
python venv 설치방법  (0) 2019.11.05
[암호] Vigenere  (0) 2019.02.09

Chapter 6. Datalink Layer


특징

- 호스트 1 : 1 형식 (점대점) 형식으로 연결

- 전송 단위 : 프레임

- 송신 호스트 전송 프레임 → 수신 호스트 : 라우팅 과정 없이 전달 됨

- Multi-Drop 지원 시 호스트 주소 개념 추가로 필요

- 물리 계층을 통해 이루어지는 두 호스트 간의 데이터 전송 과정에서 물리적 전송 오류 발생 가능성 o

  : 오류 복구 기능 - 오류 제어 방식으로 재전송 기법 사용

  → 상위 계층에 신뢰성 있는 데이터 전송 보장



* 간단 정리


 

점대점

멀티드롭

주소 개념

필요 x

필요 o

전달 호스트

하나

다수

특징

전송 오류 감지

복구 기능

호스트 구분 필요

호스트들의 공유


Frame

: 하나의 블록 또는 패킷으로 전송되는 정보의 단위, 전송 오류 해결 과정에서 사용

- 재전송을 위해 순서 번호 (Sequence Number) 포함

- 정보 프레임, 긍정 응답 프레임, 부정 응당 프레임으로 나뉨




- 정보 프레임 뿐 아닌 응답프레임에도 정보 프레임의 순서 번호가 포함

- 정보 프레임 송신 호스트는 오류 발생 여부를 응답 프레임 순서번호로 알 수 있음

- 긍정 응답 프레임만 있는 네트워크 경우 : Time Out 기능

  : 수신 쪽은 NAK 구현이 안 되어 있으므로 일정 시간 동안 응답이 없으면 재전송


오류 · 흐름 제어 없는 Protocol

: 통신 환경 - 이상적 경우 (전송 프로토콜의 구조를 가장 단순화 하기 위하여)

 → 오류 제어 기능 x, 용량 제한 x, 프레임 분실 염려 x (속도 차이 x), 흐름 제어 기능 x

  • 단방향 통신 : only 송신호스트 → 수신 호스트 방향
  • 전송 오류 없는 물리 매체 : 통신 체널에서 어떠한 형태의 전송 오류 발생 x
  • 무한 개의 수신 버퍼 : 수신 호스트의 버퍼 수 무한

: 단순 프로토콜




- 송신 호스트 : 자유롭게 프레임 전송 (원하는 만큼), 송신하는 것만으로 역할 완성

- 오류 제어 : 프레임 분실 · 변형 오류 x → 전송 프레임에 대한 응답 수신 x

- 흐름 제어 : 수신 호스트 버퍼 크기 무한 → 버퍼 용량 부족에 의한 프레임 분실 오류 x → 흐름 제어 기능 필요 x



오류 제어 없는 Protocol

: 통신 환경 - 수신 호스트의 버퍼 개수 유한 개

 → 일시적 보관 버퍼 유한 : 프레임 분실 오류 가능성 o → 송수신 사이 흐름 제어 기능 o

  • 단방향 통신 : only 송신 호스트 → 수신 호스트 방향
  • 전송 오류 없는 물리 매체 : 통신 체널에서 어떠한 형태의 전송 오류 발생 x

: 정지 - 대기 프로토콜 (stop - wait protocol)



- 수신 호스트 버퍼 개수 제한 : 흐름 제어 기능을 통해 송신 호스트 전송 속도 조절, 주로 수신 호스트가 송신 호스트의 프레임 전송 시점 제어 형태

  → ACK 프레임을 통해 긍정 응답 기능 + 다음 프레임 전송 지시 (속도 조절 o)

- 흐름 제어 x 경우 : 프레임 분실 오류를 통한 중복 프레임 발생 가능성 o

  ∴ 구분을 위한 순서 번호 필요

- 정지 - 대기 : ACK 프레임이 도착해야 다음 프레임을 전송할 수 있는 프로토콜 방식


단방향 Protocol

: 통신 환경 - 오류 제어 + 흐름 제어

  • 단방향 통신 : only 송신 호스트 → 수신 호스트 방향

:



화면 크기에 맞게 해상도 조절하기

 

Desktop version

-VM tools 이용

 

① VM 메뉴에 들어가 install VMware Tools Installation 클릭

 

 

 

② VMwareTools~ tar.gz 압축 해제하기

 

 

③ vmware-install.pl 실행하기

 

 

④ 시스템 재부팅 하기

 

 

⑤ View - Autosize - Autofit Guest 를 누르면 자동으로 해상도가 맞춰짐

 

 

 

Ubuntu 를 통해 java 설치하기

 

Ubuntu는 자바를 지원하지 않고 apt만 통해서는 자바를 바로 설치 할 수 없다.  그래서 몇가지 작업이 필요하다.

 

1.

 

 

2.

 

1과 2를 설치하여야 3을 실행할 수 있다.

 

3.

 

ppa : webupd8team/java; 는 1과 2의 apt-get을 통해 java를 쉽게 설치할 수 있도록 제공한다 생각하면 된다.

 

4.

 

앞의 3에서의 ppa~ 의 저장소를 갱신한다.

 

5.

 

apt-cache search jdk를 사용하여 jdk의 버젼을 확인 후 최신으로 깔아 주면 되지만 예전에는 apt-get을 이용하여 jdk를 설치한 반면에 이제는 repository가 지원하지 않기에 java로 깔아 줍니다.

 

 

 

7.

 

 

8.

 

설치가 제대로 되어있는지 확인 하려면 java명령어를 쳤을 때 사용 법이 나오면 잘 설치 된 것이다.

 

 

환경변수 설정

 

 

사용의 편의를 위하여 profile의 하단에 아래의 명령어를 추가시켜준다.

export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

 

 

 

자바의 위치를 필요로 하는 경우에 환경변수를 설정하여 준다.

 

 

편집내용의 파일을 저장하기에 이대로 파일을 저장해 준다.

. /etc/profile을 통해 명령을 실행시켜준다.

 

 

+ Recent posts