Skip to content
Beside the Wheel
Search
Cancel
GitHub
LinkedIn
Select theme
Dark
Light
Auto
공부
(3)
eBPF로 서버 성능 Profiling하는 법: Pyroscope의 구현 살펴보기
정수론부터 RSA까지
Spot 인스턴스에서 서버 가용성 개선하기
TIL
(832)
AI
(26)
embedding
(2)
embedding and chunking
임베딩
LLM
(3)
CTM
Curcuit Tracing
Prompt Engineering
Vector Search
(3)
Distance Metrics
Index-realated chians
Vector Search
실습
(3)
CNN, RNN
MNIST 숫자 판별
배, 자동차, 비행기 분류하기
자연어 처리
(2)
BERT
LSA와 LDA
AnthropicBlogs
CNN
DropOut
HNSW
Keras
LangchainOptions
Optimizer
RAG
RNN
Whisper
선형회귀
퍼셉트론
활성화함수
DevOps
(226)
AWS
(21)
Analytics
(2)
Athena
LogGroup
Computing
(4)
ASG Lifecycle Hook
ECS
Instance Store
RI와 Saving plan
Networking
(4)
NAT gateway & NAT instance
VPC
VPC Mapping Service
VPN Options
Security
(2)
Baston Host
KMS
API Gateway
AWS 2024 Summit Seoul
AWS cloud computing
AWS Organization
Fault Injection Semulator
Region과 Zone
SAA 오답노트
SAA 요약
Well Architected
Container
(22)
CNI
(2)
Calico
CNI
Docker
(15)
Docker Image Layer
dockersock 권한에러
DockerSwarm
exec user process caused exec format error
Overlay Network
Private registry 구축
Prune
README
가상화와 컨테이너
도커 네트워크
도커 네트워크 명령어
도커 명령어
도커 스토리지
도커 아키텍처
도커 안에서 도커 사용하기
buildx load 옵션
cAdvisor
Container Orchestration
ContainerRuntime
Docker와 PID1
DR
(2)
DR strategies
Fail over와 서버 이중화
IaC
(12)
Terraform
(7)
aws 서버 네트워크 구축
Terraform
Terraform import와 Terraforming
Terraform taint
Terraform with AWS
Terraform 키워드
Terratest
Ansible
Cobbler
Configuration Drift
Phoenix Server
Understanding Ansible, Terraform, Puppet, Chef, and Salt
Kubernetes
(109)
EKS
(12)
Add IAM to RBAC
Amazon VPC CNI
AWS Load Balancer Controller
EBS CSI driver
EKS ALB
EKS Control Plane
EKS kubecofig
EKS Network BestPractice
EKS 인증과정
IP addresse prefix
NLB IP mode
Node not Ready
Network
(10)
DNS
(3)
CoreDNS
External DNS
ServiceDNS
Debugging DNS Resolution
eBPF
HTTPProxy
IPVS
NetworkPolicy
Network Troubleshooting
Node and Pod Network Layout
Service Mesh
(11)
istio
(9)
Dry run
gateway log debug 하는 법
Istio Arcitecture
Istio authorization
Istio Configuration Profiles
Istioctl
Istio RBAC
Resource Annotations & Labels
ServiceEntry
linkerd
(1)
linkerd
service mesh
tools
(23)
Argo
(7)
ApplicationSets
Apps of Apps
ArgoCD 설치
Argo Events
Argo Workflow Priority
Config Management Plugins
Health Check
helm
(3)
Chart Development Tips
Helm
Values Files
Karpenter
(2)
Karpenter
Karpenter best practices
Kyverno
(2)
Kyverno
Usecases
GoCD
Install Cilium
K8s Metric API
k9s
KEDA
MetalLB
node shell
Node Termination Handler
OPA Gatekeeper
개념
(33)
Node Scheduling
(4)
Assigning Pods to Nodes
cordon, drain
Scheduling
Taints and Tolerations
object
(16)
Annotation
CRD
Deployments
Deployment Status
Deployment Strategy
Endpoint
Events
ingress
Labels and Selectors
Pod
Pod Readiness and Probes
Pod 생성과정
PV & PVC
RollingUpdate
Service와 port
StatefulSets
Volume
(2)
attachdetach controller
CSIDriver
CNI Specification
Disruption Budget
Endpoints
etcd
HPA와 VPA
K8s의 도커런타임 사용중단
Kubeproxy
NodePort와 ServicePort와 targetPort
Workloads
가상 IP와 서비스 프록시
사이드카 패턴
실습
(15)
Auth
(5)
Authenticating
k8s 클러스터 root CA를 통한 사용자 인증
OIDC Authentication with Dex
Security Context for a Pod or Container
Token Webhook with Guard
10 most common mistakes using kubernetes
Cert manager
End user RBAC
K8s를 위한 SpringBoot 개발
kubectl context
minukube 시작하기
NetworkPolicy Cilium example
Pulling images from ECR on Kubernetes
SpringBoot 서비스를 위한 Kubernetes 설정
환경변수 설정
K8s Architecture
Kubernetes
Kubernetes Overview Diagrams
Kublet 지표
MetalLB
Monitoring
(28)
datadog
(5)
datadog
datadog anomaly detection algorithms
datadog APM 기능 사용하기
datadog 아키텍처
helmChart로 Agent 설치
deepflow
(2)
DeepFlow
DeepFlow 논문 요약
elk
(4)
Elastic Search
ElasticSearch 검색 명령어
ELK Stack
Logstash
grafana
(3)
Granafa agent
Mixin
Pyroscope Distributor and Ingester
loki
(1)
Loki Canary
prometheus
(7)
kiali with prometheus
Mimir out-of-order sample ingestion
Mimir와 Cortex
prometheus
prometheus agent mode
prometheus glossary
prometheus storage
victoria metrics
(1)
VictoriaLogs
Bloom filter
Gorilla Compression
Grok exporter
SLO, SLI, SLA
telemetry
Proxy
(15)
envoy
(3)
Envoy
LDS
xDS configuration
nginx
(9)
location block
nginx certbot
nginx docker
NGINX Ingress Basic Auth
nginx 명령어
nginx 설정
sites available
SSL passthrough
리버스 프록시
Contour
Contour CRD 설치
Reverse Proxy vs. Ingress Controller vs. API Gateway
tools
(13)
Clium
CUE
Dex
Dex K8s Authenticator
GPG
jenkins
Keycloak
minio
Mortar
OpenHistorian
openssl로 pemKey 만들고 접속하기
Packer
Vault
CI/CD파이프라인
Cloud Agnostic Design
Platform Engineering
데브옵스
Network
(60)
error
(1)
Context deadline exceeded
L1 network access layer
(8)
CRC
Ethernet과 TokenRing
L2 스위치와 STP
MTU
NIC
데이터링크 제어(DLC)
매체 접근 제어(MAC)
아날로그, 디지털 신호와 전송
L2 internet layer
(16)
라우터
(4)
ECMP
라우터
라우팅 알고리즘
멀티캐스트 라우팅
CIDR
ICMP
IP
IPAM
IPSec
IP 데이터그램과 단편화
NAT
PacketTracer 네트워크 구성
secondary IP
UPnP
서브넷
정보기기운용기능사 실기
L3 transport layer
(6)
4계층 장비
SO_REUSEADDR
SSH config
Sticky Session과 Session Clustering
TCP와 UDP
전송계층 프로토콜
L4 appplication layer
(13)
http
(3)
HTTP
HTTP Options
keep alive
tls
(3)
SNI
TLS
TLS 인증서 발급 절차를 이해해보자
ACME
CDN
DHCP
DNS 레코드유형
FTP Active, Passive mode
java로 간단한 socket 프로그램만들기
SMTP의 보안 시스템
VPN
(3)
firezone
VPN
Wireguard와 Firezone
개념
(5)
가상화 기술
네트워크
네트워크 보안
네트워크 침해
이중화
bandwidth
Exponential Backoff And Jitter
OSI 7Layer
Switch
vTAP
WebRTC
로드밸런서
브라우저에 url을 입력하면 어떤일이 생길까?
OS
(139)
CPU
(3)
CPU 아키텍처
NUMA
QEMU
Embedded
(6)
Audio Codec
Cramfs
I2C
시리얼 통신
임베디드 리눅스 프로그래밍 수업 정리
임베디드 시스템
GPU
(2)
CUDA
nvenc, nvdec
linux
(107)
Authority
(3)
chattr과 chown
chmod
사용자 관리
BPF
(13)
BCC
BPF
BPF communicates with userspace
BPFDoor
BPF ring buffer
BPF System Call
BPF 프로그램 타입
BTF
libbpf
libbpf helper 함수
XDP
메모리 로딩
서브프로그램
Disk & Dir
(11)
Linux 디렉토리 구조
LVM
od
RAID
rclone
SMB
Symbolic Link
백업
파일 관리 명령어
파일 시스템
파일 종류
ELF
(2)
ELF
SEC()
ETC
(11)
linux 표준 에러 코드
mail
man
NTP
Perf
PMU
Redirection와 FD
Runlevel
set
X window
명령어들
Kernel
(19)
Block I/O
CPU Load Average
entropy
vmlinux
동기화와 lock
디버깅
메모리 관리와 캐시
모듈과 장치 관리
스케줄러 소스 분석
시스템 콜과 인터럽트
유저모드와 커널모드
이식성
커널 개념
커널 모듈
타이머
파일시스템
프로세스 관리
프로세스 스케줄러
프로세스 주소 공간
Memory
(2)
Swap메모리
VSS, RSS, PSS, USS
Network
(18)
DNS
(3)
bind로 DNS 서버 정의하기
DNS 서버
SRV, NAPTR
주요명령어
(4)
arp
ifconfig
ping과 netstat
route로 라우팅 테이블 확인하기
DERP
Domain-based Split Tunnels
ip_forward와 rp_filter
IP masquerading
iptables
iptables 방화벽 설정
namespace와 cgroup
Netfilter
network namespaces
ufw
Virtual Networking Interface
Process
(8)
cgroup
Deamon process
httpd
pipe
signal
top
프로세스 관리
환경변수와 프로세스
Shell
(3)
bash_profile과 bashrc
shell
zshrc
System call
(10)
epoll
file 관련 systemcall
fork와 exec
ioctl
mmap
perf event
rlimit
thread 관련 systemcall
wait과 waitpid
리눅스 시스템 프로그래밍 프로젝트
kprobe와 kretprobe
Linux Package
Linux 배포판
Linux 부팅 과정
Linux 특징 및 관련용어
Stack trace와 kallsyms
쉘 단축키
memory
(2)
Memory Mapping
페이지 교체 알고리즘
process
(6)
TAS
교착상태와 스케줄링
생산자 소비자 문제
임계영역과 상호배제
프로세스의 개념
프로세스의 관리
VM
(2)
VMware Fusion NAT config
VMware Fusion Ubuntu 디스크 용량 늘리기
window
(1)
Active Directory Domain Services
보안
(1)
엑세스 제어
c언어 컴파일과정
exit code
MKL
XDG Base Directory
디스크 시스템
반도체 8대 공정
운영체제 유형
유저, 커널레벨 스레드
파일 시스템
개발
(91)
App
(2)
React Native
(2)
New Architecture
React Native
SEO
(2)
sitemap
Web Vitals
Tools
(25)
Git
(11)
Flow
(2)
GitFlow
GithubFlow
hooks
(3)
githook을 위한 perl command
GitHub hooks
파일트리 자동생성
GitLab
git reflog
rebase 쉽게 하는법
rerere
Selfhosted Runner
자동커밋
vi
(3)
vim
vim 단축키
vi 단축키
Airflow
expr
Firefox 설정
GTM
hammerspoon
Intellij Profiling tools
Makefile
mermaid 문법
mise
Spark
Tridactyl
아키텍처 및 방법론
(46)
API 아키텍처
(4)
GraphQL
REST
RPC
SOAP
DDD
(5)
DDD
DDD의 아키텍처
도메인영역
이벤트 스토밍
컨트랙트
MSA
(8)
MSA의 장단점
메시지 브로커
사가 패턴
사가 편성
시맨틱 버저닝
통신
트랜잭션 격리
트랜잭션 로그 테일링 패턴
객체지향
(2)
SOLID
응집도와 결합도
디자인패턴
(25)
1. 생성패턴
(5)
빌더 패턴
싱글톤 패턴
추상팩토리 패턴
팩토리메소드 패턴
프로토타입 패턴
2. 구조패턴
(7)
데코레이터 패턴
브릿지 패턴
어댑터 패턴
컴포짓 패턴
퍼사드 패턴
프록시 패턴
플라이웨이트 패턴
3. 행위패턴
(11)
메멘토 패턴
방문자 패턴
상태 패턴
옵저버 패턴
이터레이터 패턴
인터프리터 패턴
전략 패턴
중재자 패턴
책임연쇄 패턴
커맨드 패턴
템플릿메소드 패턴
디자인패턴
위임 패턴(Delegate Pattern)
CQRS
HexagonalArchitecture
영상
(6)
ffmpeg
hls, dash와 cmaf
Resolution
비트레이트
자막 파일 포맷
컨테이너와 코덱
테스팅
(1)
테스팅 용어
authn과 authz
boxplot
EME
FineGrained와 CoarseGrained
Native messaging
Nightly build
turborepo
소프트웨어 공학
압축 알고리즘
데이터
(1)
NoSQL
(1)
MongoDB
(1)
writeConcern
데이터베이스
(60)
DB설계
(8)
DBMS와 RDBMS
데이터모델링
무결성 제약조건
분산데이터베이스
스키마
정규화와 반정규화
테이블분할
트랜잭션 ACID와 격리수준
MQ
(4)
Docker로 Kafka 실행
RabbitMQ
Spring with Kafka
메시지큐
NoSQL
(16)
MongoDB
(8)
Atlas Search
BinData
MongoDB
MongoDB Aggregation
MongoDB Document로 POJO 상속받기
MongoDB 스키마설계 고려사항
MongoDB 유저관리
MongoDB 쿼리
PostgreSQL
(2)
PostgreSQL
PostgreSQL명령어
redis
(2)
Redis
Spring Redis Phantomkey
Cassandra
Memcached VS Redis
NoSQL 데이터유형
NoSQL에는 ACID가 없다고?
SQL 쿼리
(23)
최적화
(3)
DB 커넥션 풀
옵티마이저
조인 수행원리
쿼리종류
(5)
DCL
DDL
DML
Procedural/Nonprocedural DML
TCL
Alias
FK옵션
GROUP BY와 HAVING절
GROUPING SETS와 GROUPING
INNER JOIN과 OUTER JOIN
ON절
ORDER BY절
ROLLUP과 CUBE
SELECT쿼리 실행순서
계층형 질의
서브쿼리
윈도우 함수
제약조건
집계함수
집합연산자
Change Date Capture
ClickHouse
Column, Row기반 DB
Data Lake와 Warehouse
MySQL Replication
OLAP
pgbouncer
Postgresql Transaction Wraparound
Two Phase commit
서버
(72)
netty
(5)
HashedWheelTimer
netty server 예제
netty 메시지 전송 흐름
netty의 thread 모델
webFlux와 netty
node.js
(3)
module.exports와 exports
puppeteer
v8과 libuv
Spring
(62)
AOP
(8)
트랜잭션
(3)
TransactionAttributeSource
트랜잭션
트랜잭션 전파
AdviceAnnotation
Pointcut
ProxyFactoryBean
Spring AOP
Spring에서 aspectj weaving사용하기
Event
(2)
ApplicationEventPublisher
@TransactionalEventListener
JPA
(27)
JPQL
(2)
FetchJoin
경로표현식
QuerydslJpa
(8)
fetchResults가 deprecated된 이유
Paging
Projection
QuerydslJpa와 QClass
QuerydslPredicateExecutor
기본문법
동적쿼리
벌크연산
캐싱
(3)
1차캐시
2차캐시
영속성 컨텍스트
Cascade
@GeneratedValue 코드보기
GenerateValue Column에 값을 넣는다면
Hibernate dialect
Hibernate 쿼리실행순서
Id로 연관관계 객체 저장
JDBC Object Mapping Fundamentalsentity
JPA
N+1 문제
OrphanRemoval
Persistable
ReadOnlyQuery 최적화
벌크연산
트랜잭션 전파 설정
SpringSecurity
(2)
CORS
CSRF
Validation
(2)
@GroupSequence
@Valid와 @Validated
Web MVC
(2)
Request 처리과정
SpringServletContainerInitializer
WebFlux
(7)
R2DBC
(2)
R2DBC
R2DBC 사용
@Controller
RouterFunctions
WebClient
WebFilter
WebFlux
기본원리
(9)
@Autowired 빈 주입 스캔 원리
@ComponentScan
Ioc와 DI
Programmatic과 Declarative
Reflection과 직렬화
등록된 빈 목록 출력하기
빈
선점 잠금과 비선점 잠금
싱글톤
AOT
@Cacheable
Spring 6.0과 Spring Boot 3.0
WAS
(2)
tomcat 구성요소
웹서버와 WAS
수학
(11)
대수학
(2)
체
타원곡선
정수론
(4)
베주 항등식
오일러 정리
유클리드 호제법
페르마 소정리
통계학
(2)
t-value
윌콕슨 순위합 검정
곱셈공식
근과 계수의 관계
미분
알고리즘
(16)
자료구조
(3)
LSM Tree
Trie
세그먼트트리
2020 중등부 정올 2차
N Queen
Range GCD
가장 가까운 두 점
담금질 기법
볼록 껍질과 회전하는 캘리퍼스
오일러 경로 테크닉
왜판원순회
외판원순회
직사각형 스위핑
최소외접원
코드포스 문제모음
홀덤
암호학
(27)
암호화
(8)
AES&IV
Cipher
Diffie–Hellman 키교환
RSA
대칭암호화
비대칭암호화
서명과 영지식 증명
해시와 MAC
응용
(15)
블록체인
(12)
Altcoin
BFT
Bitcoin
Bitcoin Script
Bitcoin WhitePaper
CEX와 DEX
Consensus mechanisms
Ethereum
HD Wallet
ICO
Stablecoin
스마트 컨트랙트
Certificate_formats
DB 암호화
Keytool
Alice and Bob
Kerckhoffs's principle
무작위성
암호학
언어
(79)
Go
(10)
BSON
Command line argument, flag
defer와 panic
GC
gomod와 gosum
Go에서 하기 쉬운 실수
pprof
slice
고루틴 스케줄링
메모리 관리
Java
(20)
JVM
(8)
Heap 영역 구조와 GC
Java Bytecode
jcmd
JVM 구성요소
Permanent to Metaspace
Runtime Data Area
TLAB과 PLAB
메모리누수
Thread
(4)
Thread 상태
@Volatile
wait()과 notifyAll()
가상스레드
Inner static class
JAR과 WAR
JAVA
JDKProxy와 CGLibProxy
JLink & JDeps
record
예외와 에러
제네릭과 variance
JavaScript
(7)
Iterator
Lexical Scope와 Closure
Promise
useEffect 안에서 setInterval 사용하기
절대경로 설정
프로토타입
화살표 함수
Kotlin
(20)
변수
(3)
List와 MutableList
Nullable
val과 var
클래스
(8)
@JvmField
@JvmStatic
Object
Sealed Class, interface
생성자
코틀린에서의 Static
클래스 상속
필드와 접근자 메서드
함수
(1)
기본인자
Collections
field 상속
InlineFuntion과 Reified
Label
Sequences
람다 표현식
범위 지정 함수
제네릭과 variance
Rust
(19)
ffi
(3)
extern
FFI
repr
메모리 참조
(5)
Rc 타입과 Weak 타입
temporary value is freed
Unwrap
소유권과 Lifetime
스마트 포인터 활용
스레드
(3)
Condvar
동시성
멀티 스레드 웹 서버 만들기
예외처리
(1)
Anyhow
String
Trait
구조체 impl
조건문과 반복문
클로저
타입과 변수
함수와 메서드
CustomAnnotation
자바<?>와 코틀린<*>
직렬화 serialVersionUID
코드
(24)
TestCode
(5)
Kotlin
(4)
Kotest
Kotest Assertions
Kotest Specs
Mockk
Mock과 Spy
비동기
(15)
coroutine
(8)
thread
(1)
공유객체 스레드 동기화
Channel
Coroutine CPS
Coroutine Delay
Coroutine Dispatcher
Coroutine Scope, Context
Integration
코루틴
reactor
(3)
Callback과 Futures
Reactor
Reactor Pattern과 event loop
cold stream과 hot stream
Coroutine vs Reactor
Flow
netty 사례연구
빌드
(4)
Gradle
(4)
DependencyHandler
Git action gradle caching
Gradle LifeCycle
멀티모듈
독후감
(37)
과학
(1)
니콜라 테슬라 평전
사회
(2)
능력주의와 불평등
그의 운명에 대한 아주 개인적인 생각
산문
(3)
보통의 존재
새는 날아가면서 뒤돌아보지 않는다.
시지프 신화 – 부조리에 관한 시론
소설
(12)
수레바퀴 아래서
멋진 신세계
데미안
말테의 수기
구토
인간실격
젊은 베르테르의 슬픔
노르웨이의 숲
삼국지
황야의 이리
고래
면도날
인문
(7)
지성적 회심
담론
발자크 평전
효율성
미쳤다는 것은 정체성이 될 수 있을까?
영향에 대한 불안
무지의 즐거움
자기계발
(7)
홀로 성장하는 시대는 끝났다
C의 유전자
네 명의 완벽주의자
세상에서 가장 긴 행복 탐구 보고서
학습하는 조직
실패를 통과하는 일
왜 미래는 남에게만 보일까
철학
(5)
지극히 인간적인 삶에 대하여
아리스토텔레스 수사학
사마의 평전
악마와 함께 춤을
키르케고르 평전
생각
(6)
고민
변화에 대하여
의식의 영역에 대하여
본질을 보려면
짧은 생각들
소유냐 존재냐
회고
(12)
2022.03-04 대덕소마고 입학소감/다짐
2022.05-08 프로젝트와 인간관계
2022.09-2023.02 불안과 판단
2023.03-07 DMS 리더 회고
2023.08-11 나는 누구인가?
2023.12 더 많은 걸 배우기 위한 경험
2024.01-02 회사 인턴 회고
2024.03-04 3학년으로서 근황
2024.05-07 나름 알찬 3학년
2024.08-12 첫 회사
2025.01-03 생각 정리
2025.03-08 그리고 생각 정리
GitHub
LinkedIn
Select theme
Dark
Light
Auto
태그: 암호화
총 9개의 글이 있습니다.
정수론부터 RSA까지
공부
2025. 11. 1.
RSA는 대표적인 비대칭 암호화 방식 중 하나이다. RSA의 기반이 되는 정수론 개념과 암호화 원리를 알아보자. 군 RSA를 이해하기 위해선 우선 군(group)이 무엇인지 알아야 한다. 오늘날 RSA를 비롯한 많은 암호화 방식이 군론을 기반으로 한다. 개념은 어렵지 않다. 군이란, 아래 규칙에 맞게 원소의 집합과 연산(덧셈, 곱셈)을 정의한 것이다. 닫힘: 집합 안의 두 원소를 연산했을 때, 그 결과가 군 안에 속해야 한다. 결합법칙: 여러 원소에 대한 연산을 임의의 순서로 수행할 수 있다. (e.g. (a+b)+c = a+(b+c)) 항등원: 특정 원소와 항등원을 연산한 결과가 그 원소 자신이 되어야 한다. (e.g. a+0=a, 이 경우 항등원 0이 군 내에 존재함) 역원: 두 원소를 연산한 결과가
RSA
암호화
2025. 10. 18.
RSA는 Ron Rivest, Adi Shamir, Leonard Adleman에 의해 1977년 개발된 최초의 실용적인 공개 키 암호화 알고리즘이다. 두 큰 소수를 곱하는 것은 쉽지만, 그 결과를 소인수분해하는 것은 계산적으로 매우 어렵다는 수학적 난제를 기반으로 한다. 충분히 큰 키 크기를 사용하면 현재 알려진 알고리즘으로는 현실적인 시간 내에 해독이 불가능하다. 키 생성 과정 RSA 키 쌍을 생성하는 단계는 다음과 같다: 두 소수 선택 두 개의 큰 소수 p와 q를 무작위로 선택한다. 실제 사용에서는 각각 1024비트 이상의 소수를 선택한다. 모듈러스 계산 n = p × q를 계산한다. n은 공개 키와 개인 키 모두에 포함되는 모듈러스이다. 오일러 피 함수 계산 φ(n) = (p-1)
서명과 영지식 증명
암호화
2025. 10. 10.
암호학에서는 서명을 Digital signature(디지털 서명) 또는 Signature scheme(서명 체계)이라 한다. 서명 체계는 일반적으로 다음 세 가지 알고리즘으로 구성된다. 서명자가 새로운 비밀키(서명키)와 공개키(검증키)를 생성하는 데 사용하는 키 쌍 생성 알고리즘 비밀키와 메시지를 사용하여 서명을 생성하는 서명 알고리즘 공개키, 메시지, 서명을 사용하여 성공 또는 오류 메시지를 반환하는 확인 알고리즘 서명은 메시지의 원본과 메시지의 무결성을 인증하는 데 유용하다. 원본(origin): 내 서명이 있는 경우 내가 보낸 것이다. 무결성(integrity): 누군가가 메시지를 수정하면 서명이 무효화된다. MAC에서 생성된 인증 태그는 타이밍 공격을 피하기 위해 상수 시간에 검
AES&IV
암호화
2025. 10. 8.
AES에서 동일한 평문에 대해 항상 동일한 암호문을 얻을까? (동일한 IV와 키 사용 시) AES의 ECB(Electronic Code Book) 모드에서는 동일한 키에 대해 항상 동일한 암호문을 얻는다. 블록 암호이므로 패딩이 마지막 문자를 변경하지만, 16바이트가 있는 한 첫 번째 블록은 동일하다. 하지만 IV를 사용하는 모드는 어떨까? 스트림 암호 모드인 GCM을 살펴보고 동일한 키와 동일한 IV를 사용할 때 어떤 일이 발생하는지 확인해보자. 다음과 같은 Golang 코드를 작성함. package main --1:403F53"( "crypto/aes" "crypto/cipher" "crypto/sha256" "fmt" "os" "golang.org/x/crypto/pbkdf2
Cipher
암호화
2025. 10. 8.
암호화는 메시지를 인코딩하여 인가된 사용자만 이해하거나 접근할 수 있도록 하는 프로세스임. 평문(plaintext)이라고 하는 메시지를 암호화 알고리즘(cipher)을 사용하여 암호화하면, 인가된 사용자만 복호화를 통해 읽을 수 있는 암호문(ciphertext)이 생성됨. Cipher JCE(Java Cryptography Extension)는 JCA(Java Cryptography Architecture)의 일부로, 애플리케이션에 데이터 암호화/복호화 및 개인 데이터 해싱을 위한 암호화 cipher 제공 javax.crypto.Cipher 클래스는 JCE 프레임워크의 핵심으로, 암호화 및 복호화 기능 제공 public class Cipher { private static final Debug de
Diffie–Hellman 키교환
암호화
2025. 10. 8.
DH 키교환 (Diffie–Hellman key exchange) 1976년 Whitfield Diffie와 Martin E. Hellman이 라는 제목의 논문으로 발표한 키 교환 알고리즘 곱셈군에서의 이산로그문제를 기반으로 함 이산로그 문제 gˣ ≡ h (mod p)를 만족하는 지수 x를 찾는 문제 e.g. 2 = 3ˣ mod 5를 만족하는 x는 3 키 쌍을 생성하는 방법 모든 참가자는 큰 소수 p와 생성원 g에 동의해야 한다. 각 참가자는 비밀 키가 되는 난수 x를 생성한다. 각 참가자는 공개 키를 gˣ mod p와 같이 파생한다. 동작 앨리스는 비밀키 a와 A = gᵃ mod p를 가지고 있다. 밥은 비밀키 b와 공개키 B = gᵇ mod p를 가지고 있다. 공유
대칭암호화
암호화
2025. 10. 8.
AES (Advanced Encryption Standard) 현재 가장 널리 사용되는 대칭 암호화 표준이다. NIST에서 2001년 표준으로 채택되었으며, 이전 암호화 표준이었던 DES를 대체했다. 128비트의 평문을 128비트의 암호문으로 암호화한다. 고정된 크기의 평문을 암호화하기 때문에 블록 암호(Block cipher) 내부 동작 AES는 암호화 과정에서 평문의 state를 4*4 행렬로 본다. 여러 번 반복하는 라운드 함수에서, 라운드별로 (기본 대칭키에서 파생된) 각각 다른 라운드 키를 사용한다. 이를 통해 대칭 키의 비트를 약간만 변경함녀 완전히 다른 암호화가 가능하다 (확산 diffusion) 각 라운드엔 4개의 내부 단계가 있다. SubBytes: S-box를 사
비대칭암호화
암호화
2025. 10. 8.
비대칭 암호화는 공개 키와 개인 키라는 두 개의 서로 다른 키를 사용하는 암호화 방식이다. 공개 키로 암호화한 데이터는 개인 키로만 복호화할 수 있다. 공개 키는 안전하지 않은 채널로 전송해도 안전하다. n명이 통신하려면 n개의 키 쌍만 필요하다. (대칭 암호화는 n(n-1)/2개) RSA (Rivest-Shamir-Adleman) 1977년 개발된 최초의 실용적 공개 키 암호 시스템이다. 큰 소수의 곱셈은 쉽지만, 그 결과를 소인수분해하는 것은 계산적으로 어렵다는 원리를 이용한다. 키 생성 두 개의 큰 소수 p, q를 선택한다. n = p × q를 계산한다. (공개 모듈러스) φ(n) = (p-1)(q-1)을 계산한다. φ(n)과 서로소인 e를 선택한다. (공개 지수, 보통 65537
해시와 MAC
암호화
2025. 10. 8.
해시 함수 해시 함수는 데이터를 입력으로 받고 고유한 바이트 문자열을 생성한다. 출력을 다이제스트, 혹은 해시라고 한다. 해시의 특징 3가지가 있다. 역상 저항성(Preimage resistance): 역상(Preimage == y) 추측에 저항하는(Resistance) 성질 최초, 해시값(y)이 확인된 상태 입력값(x)을 찾는 것은 계산적으로 불가능 제2 역상 저항성(Second preimage resistance): 역상 추측에 저항하는 성질 최초, 입력값(x)이 확인된 상태 동일한 해시값(y)이 나오는 다른 입력값(x’)을 찾는 것은 계산적으로 불가능 충돌 저항성(Collision resistance): 서로 다른 입력값 추측에 저항하는 성질. 서로 다른 입력값은 동일한 해시값을