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 클 라 이언 트 인증 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기