salsa20: performance optimizations (e.g. SIMD)
Chưa có ai nhận issue này.
- #441 của @naoNao89 — đã đóng, không merge
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 35/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Cần làm rõ
- Mức độ hoạt động
- Ít trao đổi
- Công nghệ
- rust
- Lĩnh vực
- cryptography, performance
Hướng nghiên cứu
Bắt đầu bằng việc xem xét crate salsa20 và phần công việc chacha20 cho SSE2 và AVX2 đã hoàn thành được tham chiếu trong issue này, sau đó so sánh triển khai salsa20 hiện có với cách tiếp cận SIMD cần thiết cho x86 và x86_64. Xác nhận phạm vi hỗ trợ SSE2 và AVX2, benchmark kết quả so với triển khai hiện tại, và coi công việc là hoàn tất khi các đường dẫn được tối ưu hóa đã được triển khai, kiểm thử và cải thiện hiệu năng một cách có thể đo lường được.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
There are two big optimizations we could do on both the chacha20 and salsa20 crates.
Avoid recomputing initial state
EDIT: both crates now have a new method to compute the initial state, and separate apply_keystream / generate methods to compute a block
-
chacha20crate -
salsa20crate
RFC 8439 Section 3 describes caching the initial block state once computed as a performance optimization:
Each block of ChaCha20 involves 16 move operations and one increment
operation for loading the state, 80 each of XOR, addition and roll
operations for the rounds, 16 more add operations and 16 XOR
operations for protecting the plaintext. Section 2.3 describes the
ChaCha block function as "adding the original input words". This
implies that before starting the rounds on the ChaCha state, we copy
it aside, only to add it in later. This is correct, but we can save
a few operations if we instead copy the state and do the work on the
copy. This way, for the next block you don't need to recreate the
state, but only to increment the block counter. This saves
approximately 5.5% of the cycles.
SIMD support
Both ChaCha20 and Salsa20 are amenable to SIMD optimizations. We should add SIMD optimizations on x86/x86_64 at the very least.
x86/x86_64
chacha20- SSE2 (#61)
- AVX2 (#83, #87)
-
salsa20- SSE2
- AVX2
Other CPU architectures
- ARM?
- Ngôn ngữ chính
- Rust
- Star
- 327
- Fork
- 77
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của RustCrypto/stream-ciphers
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 68/100
RustCrypto/stream-ciphers#582 ·
-
`salsa20`: support 16 byte keysCó thể đã có người làm @micolous đã nhận 435 ngày trước. Đang mở
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 45/100
RustCrypto/stream-ciphers#432 · 2 bình luận ·
-
Missing algorithmsĐang mởhelp wanted
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 42/100
RustCrypto/stream-ciphers#219 · 7 bình luận ·
Tất cả issue của RustCrypto/stream-ciphers
Issue tương tự
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 82/100
521xueweihan/HelloGitHub#4023 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
nautechsystems/nautilus_trader#5365 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
documentation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
IntersectMBO/developer-experience#347 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
registrystack/registry-stack#2168 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug crate: 3d help wanted triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
kornia/kornia-rs#1203 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày