Python 간단 한 클 라 이언 트 인증 실현
분포 식 시스템 에서 간단 한 클 라 이언 트 연결 인증 기능 을 실현 하고 싶 고 SSL 처럼 복잡 하고 싶 지 않 습 니 다.
해결 방안
hmac 모듈 을 이용 하여 연결 악 수 를 실현 하여 간단 하고 효율 적 인 인증 과정 을 실현 할 수 있다.다음은 코드 예제 입 니 다.
import hmac
import os
def client_authenticate(connection, secret_key):
'''
Authenticate client to a remote service.
connection represents a network connection.
secret_key is a key known only to both client/server.
'''
message = connection.recv(32)
hash = hmac.new(secret_key, message)
digest = hash.digest()
connection.send(digest)
def server_authenticate(connection, secret_key):
'''
Request client authentication.
'''
message = os.urandom(32)
connection.send(message)
hash = hmac.new(secret_key, message)
digest = hash.digest()
response = connection.recv(len(digest))
return hmac.compare_digest(digest,response)
기본 원 리 는 연결 이 만들어 진 후에 서버 가 클 라 이언 트 에 게 무 작위 바이트 메 시 지 를 보 내 는 것 입 니 다(이 예 에서 os.urandom()반환 값 을 사 용 했 습 니 다).클 라 이언 트 와 서버 는 hmac 와 쌍방 만 아 는 키 를 동시에 이용 하여 암호 화 된 해시 값 을 계산 합 니 다.그리고 클 라 이언 트 는 계 산 된 요약 을 서버 에 보 냅 니 다.서버 는 이 값 이 자신 이 계산 한 것 과 일치 하 는 지 비교 해서 연결 을 받 아들 이거 나 거부 할 지 결정 합 니 다.요약 은 hmac.compare 를 사용 해 야 합 니 다.digest()함수.이 함 수 를 사용 하면 시간 분석 공격 을 피 할 수 있 습 니 다.간단 한 비교 연산 자(=)를 사용 하지 마 십시오.이 함 수 를 사용 하기 위해 서 는 기 존의 네트워크 나 메시지 코드 에 통합 해 야 합 니 다.예 를 들 어 sockets 에 대해 서버 코드 는 다음 과 유사 해 야 합 니 다.
from socket import socket, AF_INET, SOCK_STREAM
secret_key = b'peekaboo'
def echo_handler(client_sock):
if not server_authenticate(client_sock, secret_key):
client_sock.close()
return
while True:
msg = client_sock.recv(8192)
if not msg:
break
client_sock.sendall(msg)
def echo_server(address):
s = socket(AF_INET, SOCK_STREAM)
s.bind(address)
s.listen(5)
while True:
c,a = s.accept()
echo_handler(c)
echo_server(('', 18000))
Within a client, you would do this:
from socket import socket, AF_INET, SOCK_STREAM
secret_key = b'peekaboo'
s = socket(AF_INET, SOCK_STREAM)
s.connect(('localhost', 18000))
client_authenticate(s, secret_key)
s.send(b'Hello World')
resp = s.recv(1024)
토론 하 다.hmac 인증 의 흔 한 사용 장면 은 내부 정보 통신 시스템 과 프로 세 스 간 통신 이다.예 를 들 어 하나의 클 러 스 터 에 있 는 여러 프로세서 간 의 통신 과 관련 된 시스템 이 있다 면 이 절 방안 을 사용 하여 허용 되 는 프로 세 스 간 에 만 서로 통신 할 수 있 도록 할 수 있 습 니 다.사실 hmac 기반 인증 은 multiprocessing 모듈 에 의 해 사용 되 어 하위 프로 세 스 의 직접적인 통신 을 실현 합 니 다.
또 하나 강조해 야 할 것 은 연결 인증 과 암호 화 는 별 개의 일이 다.인증 에 성공 한 후 통신 메 시 지 는 명문 으로 보 내 졌 습 니 다.누구나 이 연결 선 을 감청 하려 면 메 시 지 를 볼 수 있 습 니 다(쌍방의 키 가 전송 되 지 않 지만).
hmac 인증 알고리즘 은 MD5 와 SHA-1 과 같은 해시 함 수 를 바탕 으로 IETF RFC 2104 에 대해 상세 하 게 소개 합 니 다.
이상 은 Python 이 간단 한 클 라 이언 트 인증 을 실현 하 는 상세 한 내용 입 니 다.Python 클 라 이언 트 인증 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.