*
-
[비대칭키 알고리즘] DH, RSA의 수학적 자물쇠와 그 취약점 보완Algorithm 2024. 4. 17. 01:30
들어가며 HTTPS의 주요 기술인 '키 교환'과 '디지털 서명'은 '비대칭키' 알고리즘을 사용합니다. 비대칭키는 '개인키'-'공개키' 쌍으로 이루어진 키를 말하는데, 공개키는 말 그대로 누구에게나 공개되는 반면, 개인키는 비밀로 유지되어야 합니다. 이 글에서는 키 교환과 디지털 서명의 대표적인 알고리즘인 DH(Diffie-Hellman)와 RSA(Riveset-Shamir-Adelman)를 다룹니다. 비대칭키 방식의 DH와 RSA는 정방향으로 계산하기 쉽지만 역방향 계산은 어려운 '일방향 함수'의 개념을 활용합니다. 예를 들어, 큰 두 수의 곱셈은 쉽지만 큰 합성수에 대한 소인수 분해는 어렵습니다. 이와 같이 DH로 생성된 대칭키를 유추하거나, RSA로 암호화된 데이터를 복호화하려면 매우 어려운 역 연..
-
[HTTPS] SSL/TLS Handshake란?NetWork 2024. 4. 4. 02:34
들어가며 인터넷 보안은 개인, 기업, 나아가 국가적 차원에서 정보 보호와 사이버 범죄 예방에 필수적인 요소입니다. 관련 법안도 존재합니다. 개인정보를 취급하는 모든 웹사이트는 2016년 3월 22일 이후로 ⌜정보통신망법⌟ 제 28조 1항 제4호에 따라 의무적으로 HTTPS 서버를 구축해야 하며, 위반 시 3천만원 이하의 과태료가 부과됩니다. HTTPS 서버를 구축한다는 것은 SSL/TLS 인증서를 사용한다는 의미입니다. SSL/TLS는 HTTPS 통신의 핵심으로, 웹 서버와 클라이언트 간의 안전한 데이터 전송을 보장하기 위해 개발된 보안 프로토콜입니다. 또한 웹 사이트의 신뢰성을 유지하기 위한 방법이기도 합니다. 참고로 SSL이면 SSL이고 TLS면 TLS지, SSL/TLS는 도대체 무엇인지 궁금하..
-
[웹 통신 과정 해부하기] 네트워크 접속부터 브라우저 렌더링까지NetWork 2024. 3. 31. 16:50
들어가며 클라이언트가 네트워크에 연결된 후 브라우저에서 특정 도메인을 검색하고, 그 결과 렌더링된 페이지가 보여지기까지의 과정을 자세히 살펴보겠습니다. 이 글에서는 '클라이언트의 관점'에서 웹 서버에 접속하기 위해 필요한 핵심 요소들에 집중합니다. 따라서 클라이언트의 웹 서버 최초 접속 이후 서버가 클라이언트의 상태를 유지하거나 식별하기 위해 사용하는 세션, 쿠키, 토큰과 같은 기술에 대해서는 다루지 않습니다. 목차는 아래와 같습니다. 목차1. ISP 네트워크에 접속2. IP 할당3. 서버 IP 변환4. 서버와의 연결 구축5. HTTP(S) Request 메세지 생성 및 송신6. HTTP(S) Response 메세지 수신7. 브라우저 렌더링8. 마무리9. Reference 1. ISP 네트워크에 접속..
-
[Resilience4j] 외부 서비스 호출 로직에 서킷 브레이커 패턴 적용하기Design Pattern 2024. 2. 18. 17:32
들어가며 외부 서비스에 장애가 발생하더라도 연속적인 서비스를 제공하려면 어떻게 해야할까요? 트래픽 폭증 등의 이유로 외부 서비스가 당장 복구되기 어려울 때, 계속해서 외부 서비스에 데이터를 요청한다면 해당 서버에 부하를 가하게 되고 사용자에게도 지속적으로 장애 상황이 전파될 것입니다. 이런 경우, '서킷 브레이커' 패턴을 사용함으로써 외부 서비스 호출 실패가 전체 시스템에 영향을 미치는 것을 방지할 수 있습니다. 그럼 도대체 서킷 브레이커가 무엇인지, 서킷 브레이커가 어떻게 서비스 안정성과 고가용성을 위한 디자인 패턴으로서 기능하는지 살펴보겠습니다. 참고로 저는 재시도(retry)와 서킷 브레이커(circuit breaker)를 조합해서 사용했습니다. 목차1. 서킷 브레이커 패턴이란?(feat. 고가..
-
[I/O multiplexing] select vs kqueueNetWork 2024. 1. 7. 23:59
I/O multiplexing이 가능한 채팅 프로그램을 고도화한 경험을 공유합니다. I/O multiplexing 구현을 위한 system call을 O(n)의 시간복잡도를 가지는 'select'에서 시간복잡도 O(1)의 'kqueue'로 변경했습니다. 본 포스팅의 목차는 아래와 같습니다. 1. I/O multiplexing 개념 - multiplexing의 정의 - I/O model의 종류 - I/O multiplexing의 종류2. 코드로 확인하는 select vs kqueue3. trouble shooting: 표준입력은 READ_EVENT 이다! 1. I/O multiplexing 개념 본격적으로 select와 kqueue를 비교하기 전, 'I/O multiplexing 채팅 프로그램..
-
[비동기 프로그래밍] asyncio.Task 소스코드 분석 및 오버라이딩을 통해 원하는 기능 구현하기Python/Library 2023. 5. 21. 16:43
이번주는 회사에서 SNMP Trap을 수신하는 NMS(Network Management System) 제품에 대한 보수 요청이 들어와 비동기 라이브러리 asyncio를 뜯어보고 오버라이딩을 통해 원하는 기능을 추가한 경험에 대해서 써보려고 합니다.요청사항이벤트 중복 발생 시 이벤트 자동 해제 시간을 최신 발생시점으로 갱신해야 함 우선, Trap이란 간단히 말해서 SNMP 프로토콜에서 제공하는 '단방향' 이벤트 전달방식을 말합니다. SNMP(Simple Network Management Protocol)는 네트워크 장비 관리 프로토콜로서 Manager와 Agent간에 주고받는 메세지 패킷의 형식을 정의하며 Manager와 Agent의 상호 데이터 교환을 가능하게 합니다. SNMP 메세지는 네트워크 관리..
-
RuntimeError(There is no current event loop in thread 'ThreadPoolExecutor-0_0') 해결 - ensure_future()와 create_task()의 차이점Trouble Shooting/Structural Error 2023. 5. 7. 11:58
저는 파이썬을 사용하는 서버 개발자로서 회사에서 주로 asyncio를 활용한 비동기 프로그래밍을 하고 있습니다. 저번주 업무는 여러 개의 oid에 대해서 snmp walk를 비동기로 수행하는 엔진을 만드는 것이었는데 작업 중 예상치 못한 에러를 만났습니다. 이것저것 시도해보다 에러는 잡았는데 이유가 이해되지 않아 거의 1주일을 고민했습니다. context switching, thread, coroutine등의 개념을 알고 나서야 어느 정도 이해가 되어 그 과정을 공유하고자 합니다. 에러가 발생한 부분은 async def로 정의한 코루틴 함수(table_task)를 asyncio.ensure_future()의 인자로 전달해 task로 반환시켜 task list(vendor_tasks)에 추가하는 코드였고..
-
[Redis] 백업을 통한 데이터 영속화DataBase/NoSQL 2023. 3. 12. 22:55
Redis는 인메모리 저장 방식으로 리부팅시 데이터가 휘발된다. 따라서 기존 데이터를 영속화하여 복구, 유지시키기 위해서는 디스크에 데이터 백업해주는 과정이 필요하다. 백업 방식에는 1) RDB snapshot, 2) AOF 2가지가 있다. RDB snapshot은 특정 시점을 스냅샷으로 남겨 데이터를 저장하는 방식을 말한다. 여기서 "RDB"는 관계형 데이터베이스가 아니라 Redis DataBase를 의미한다. redis.conf 파일에서 스냅샷 저장에 대한 주기 설정을 할 수 있는데, save 60 10으로 설정하면 60초마다 10개 이상의 데이터 변경이 있을 때 데이터를 저장하겠다는 의미이다. 아래는 redis.conf에 기본으로 설정되어있는 # save 3600 1 300 100 60 1000..