latticearc

Проекты, которые следуют приведенным ниже лучшим практикам, могут добровольно и самостоятельно оценить себя и продемонстрировать, что они получили значок Open Source Security Foundation (OpenSSF).

Не существует набора практик, гарантирующего, что у программного обеспечения никогда не будет недостатков или уязвимостей; даже формальные методы могут не помочь, если спецификации или допущения ошибочны. Также не существует какой-либо практики, которая могла бы гарантировать, что проект будет поддерживать здоровое и хорошо функционирующее сообщество разработчиков. Однако следующие хорошие правила могут помочь улучшить результаты проектов. Например, некоторые правила описывают ревью несколькими участниками перед выпуском, что может помочь найти технические уязвимости, которые было бы сложно найти другим способом, и помочь построить доверие и желание дальнейшего взаимодействия между разработчиками из разных компаний. Чтобы получить значок, нужно выполнить все критерии с ключевыми словами "НЕОБХОДИМО"/"ОБЯЗАН"/"НЕДОПУСТИМО", все критерии со словом "СЛЕДУЕТ" либо должны удовлетворяться, либо должно быть приведено обоснование их невыполнения, и все критерии со словом "ЖЕЛАТЕЛЬНО" могут быть удовлетворены ИЛИ неудовлетворены (желательно, чтобы они были хотя бы рассмотрены). Если вы хотите ввести общий комментарий вместо объяснения, почему текущая ситуация приемлема, начните текст с '//' и пробела. Приветствуется обратная связь через сайт на GitHub в виде issues или pull requests. Существует также список рассылки для общих вопросов.

Мы с удовольствием предоставляем информацию на нескольких языках, однако, если есть какой-либо конфликт или несоответствие между переводами, английская версия является авторитетной.
Если это ваш проект, пожалуйста, покажите свой значок на странице проекта! Статус значка выглядит следующим образом: Уровень значка для проекта 11857 - passing Вот как вставить его:
Вы можете показать свой статус значка, вставив его в файл с разметкой Markdown:
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/11857/badge)](https://www.bestpractices.dev/projects/11857)
- или HTML:
<a href="https://www.bestpractices.dev/projects/11857"><img src="https://www.bestpractices.dev/projects/11857/badge"></a>


Это критерии уровня Passing. Вы также можете просмотреть критерии уровня Silver или Gold.

Baseline Series: Базовый уровень 1 Базовый Уровень 2 Базовый Уровень 3

        

 Основы 13/13

  • Общая

    Обратите внимание, что другие проекты могут использовать то же имя.

    LatticeArc is a post-quantum cryptography library for Rust implementing NIST FIPS 203-206 standards (ML-KEM, ML-DSA, SLH-DSA, FN-DSA) for quantum-resistant encryption and digital signatures.

    Используйте формат выражения лицензии SPDX; примеры включают «Apache-2.0», «BSD-2-Clause», «BSD-3-Clause», «GPL-2.0+», «LGPL-3.0+», «MIT» и «(BSD-2-Clause OR Ruby)».
    Если используется более одного языка, перечислите их через запятую (пробелы необязательны), и отсортируйте их от наиболее до наименее используемого. Если список длинный, пожалуйста, перечислите по крайней мере три наиболее распространенных. Если языка нет (например, это проект только для документации или только для тестирования), используйте один символ «-» (минус). Для каждого языка используйте общепринятую капитализацию названия, например «JavaScript».
    Common Platform Enumeration (CPE) - это структурированная схема именования для информационных систем, программного обеспечения и пакетов. Она используется в ряде систем и баз данных для отчетов об уязвимостях.
  • Основная информация на веб-сайте проекта


    Веб-сайт проекта ОБЯЗАН кратко описывать, что делает программное обеспечение (какую проблему решает?). [description_good]
    Описание ОБЯЗАНО быть на языке, который могут понять потенциальные пользователи (например, с минимумом жаргона).

    The README.md clearly describes the problem and solution:

    Problem: "Current public-key cryptography (RSA, ECC) will be broken by quantum computers running Shor's algorithm. While large-scale quantum computers don't exist yet,
    encrypted data captured today can be decrypted in the future—a threat known as 'harvest now, decrypt later.'"

    Solution: "LatticeArc is a post-quantum cryptography library for Rust, implementing the NIST FIPS 203-206 standards for quantum-resistant encryption and digital
    signatures."

    Key features are succinctly listed:

    • ML-KEM (FIPS 203) - Key encapsulation
    • ML-DSA (FIPS 204) - Digital signatures
    • SLH-DSA (FIPS 205) - Hash-based signatures
    • FN-DSA (FIPS 206) - Lattice-based signatures

    The README also explains why hybrid mode is used (defense in depth) with clear diagrams.

    URL: https://github.com/LatticeArc/latticearc/blob/main/README.md



    Веб-сайт проекта ОБЯЗАН предоставлять информацию о том, как: получать и предоставлять обратную связь (например, отчеты об ошибках или улучшения) и вносить свой вклад в программное обеспечение. [interact]

    The project provides clear information for all three requirements:

    1. OBTAIN:

      • README.md shows: cargo dependency latticearc = "0.1"
      • Crates.io badge links to package
      • GitHub repository for source code
    2. PROVIDE FEEDBACK:

      • GitHub Issues for bug reports and feature requests
      • SECURITY.md for vulnerability reporting (security@latticearc.com)
      • GitHub Discussions (if enabled)
    3. CONTRIBUTE:

      • CONTRIBUTING.md with:
        • Development setup instructions
        • Code style requirements (rustfmt, clippy)
        • Testing requirements
        • Pull request process
        • Code of conduct reference

    URLs:



    В описании того, как сделать вклад, НЕОБХОДИМО объяснить процесс внесения вклада (например, используются ли pull request'ы). (Требуется URL) [contribution]
    Мы предполагаем, что проекты на GitHub используют issues и pull requests, если не указано иное. Описание может быть кратким, например, указывать, что проект использует pull requests, issue tracker или сообщения в список рассылки (какой?).

    CONTRIBUTING.md clearly explains the contribution process:

    1. Pull Request Process (Section "Submitting Changes"):

      • Create PR against main branch
      • Fill out PR template
      • Ensure CI passes
      • Request review from maintainers
      • Address feedback
      • PRs require 2 approvals
    2. Branch Strategy:

      • feature/description for new features
      • fix/description for bug fixes
      • docs/description for documentation
    3. Commit Convention:

      • Conventional Commits format required
      • Types: feat, fix, docs, test, refactor, perf, chore, security
    4. PR Checklist provided:

      • Code compiles without warnings
      • All tests pass
      • New code has tests
      • Documentation updated
      • CHANGELOG.md updated

    URL: https://github.com/LatticeArc/latticearc/blob/main/CONTRIBUTING.md



    В информацию о том, как внести вклад, СЛЕДУЕТ включать требования к приемлемым взносам (например, ссылку на любой требуемый стандарт кодирования). (Требуется URL) [contribution_requirements]

    CONTRIBUTING.md specifies comprehensive requirements for acceptable contributions:

    1. Code Style Requirements:

      • rustfmt with project config (rustfmt.toml)
      • Max line width: 100 characters
      • Must pass: cargo clippy --workspace --all-targets --all-features -- -D warnings
    2. Testing Requirements:

      • Unit tests: 90%+ line coverage
      • Overall: 80%+ coverage
      • All public APIs must have tests
      • Must pass: cargo test --workspace --all-features
    3. Documentation Requirements:

      • All public items must be documented
      • Include # Examples section for complex APIs
      • Include # Errors section for fallible functions
      • Include # Panics section if applicable
    4. Security Requirements:

      • No unsafe code in cryptographic paths
      • Use constant-time operations for secret data
      • Zeroize sensitive data on drop
      • Validate all inputs
    5. Prohibited Patterns:

      • No unwrap()/expect() in library code
      • No timing-leak comparisons
      • No unzeroized sensitive data
      • No unsafe code
    6. Required Patterns:

      • Proper error handling with ?
      • Constant-time comparison (subtle::ConstantTimeEq)
      • Automatic zeroization (zeroize crate)

    URL: https://github.com/LatticeArc/latticearc/blob/main/CONTRIBUTING.md


  • Свободная лицензия


    ПО, создаваемое проектом, ОБЯЗАНО быть выпущено под свободной лицензией. [floss_license]
    Свободное ПО (далее СПО) - это программное обеспечение, которое соответствует Определению Открытого ПО (официальный текст на англ.) или Определению Свободного Программного Обеспечения. Примеры таких лицензий включают CC0, MIT, BSD 2-Clause, BSD 3-Clause, Apache 2.0, Меньшая стандартная общественная лицензия GNU (LGPL) и Стандартная общественная лицензия GNU (GPL). Для наших целей это означает, что лицензия ОБЯЗАНА быть: ПО МОЖЕТ одновременно лицензироваться на других условиях (например, приемлема комбинация «GPLv2 или закрытая лицензия»).

    LatticeArc is released under the Apache License 2.0, an OSI-approved free/libre open source software license.

    • LICENSE file contains full Apache 2.0 text
    • Cargo.toml declares: license = "Apache-2.0"
    • README.md displays license badge
    • All source files are covered under this license

    Apache 2.0 is approved by:

    • Open Source Initiative (OSI)
    • Free Software Foundation (as a free software license)
    • SPDX identifier: Apache-2.0

    URL: https://github.com/LatticeArc/latticearc/blob/main/LICENSE The Apache-2.0 license is approved by the Open Source Initiative (OSI).



    ЖЕЛАТЕЛЬНО, чтобы все лицензии для ПО, создаваемого проектом, были одобрены Open Source Initiative (OSI). [floss_license_osi]
    Для одобрения OSI используется строгий процесс, чтобы определить, какие лицензии соответствуют Открытому ПО.

    Apache License 2.0 is approved by the Open Source Initiative (OSI).

    OSI Approval: https://opensource.org/licenses/Apache-2.0

    Apache 2.0 is one of the most widely used OSI-approved licenses, used by:

    • Apache Software Foundation projects
    • Google (Android, TensorFlow, Kubernetes)
    • Many Rust ecosystem crates

    The license allows:

    • Commercial use
    • Modification
    • Distribution
    • Patent use
    • Private use

    With conditions:

    • License and copyright notice
    • State changes

    URL:



    Проект ОБЯЗАН публиковать лицензию или лицензии своих результатов в стандартном расположении в своем репозитории исходного кода. (Требуется URL) [license_location]
    Например, в качестве файла верхнего уровня с именем LICENSE или COPYING. Имена файлов лицензии МОГУТ сопровождаться расширением, таким как «.txt» или «.md». Другим соглашением может быть наличие каталога с именем LICENSES, содержащего файлы лицензий; имена этих файлов обычно соответствуют SPDX-идентификатору лицензии, за которым следует соответствующее расширение файла, как описано в спецификации REUSE . Обратите внимание, что этот критерий является обязательным только для репозитория с исходным кодом. Вам НЕ нужно включать файл лицензии при генерации чего-либо из исходного кода (например, исполняемого файла, пакета или контейнера). Например, при создании пакета R для Comprehensive R Archive Network (CRAN) рекомендуется следовать стандартной практике CRAN: если лицензия является стандартной, используйте стандартную короткую спецификацию лицензии (чтобы избежать установки еще одной копии текста) и добавьте файл LICENSE в списке исключений, например .Rbuildignore. Аналогично, при создании пакета Debian вы можете поместить в файл copyright ссылку на текст лицензии в /usr/share/common-licenses и исключить файл лицензии из созданного пакета (например, удаляя файл после вызова dh_auto_install). Мы рекомендуем включать машиночитаемую информацию о лицензии в сгенерированных форматах, где это возможно.

    The license is posted in the standard location:

    1. LICENSE file in repository root

      • Full Apache 2.0 license text
      • Standard filename recognized by GitHub, crates.io, and other tools
    2. Cargo.toml metadata

      • license = "Apache-2.0" in workspace package config
      • SPDX identifier for automated detection
    3. README.md badge

      • License badge visible at top of README
      • Links to LICENSE file

    GitHub automatically detects and displays the license in the repository sidebar.

    URL: https://github.com/LatticeArc/latticearc/blob/main/LICENSE


  • Документация


    Проект ОБЯЗАН предоставлять базовую документацию для программного обеспечения, создаваемого проектом. [documentation_basics]
    Эта документация должна быть в некоторых формах (таких как текст или видео), которые включают в себя: как установить программное обеспечение, как его запустить, как его использовать (возможно, с помощью учебника с примерами) и как использовать его безопасно (например, что делать и чего не делать), если эти темы применимы для данного программного обеспечения. Документация по безопасности не обязательно должна быть длинной. Проект МОЖЕТ использовать гипертекстовые ссылки для не-проектных материалов в качестве документации. Если проект не создает программное обеспечение, выберите «неприменимо» (N/A).

    The project provides comprehensive documentation:

    1. README.md - Project overview and quick start

      • Why post-quantum cryptography
      • Why hybrid mode
      • Quick start code examples
      • Algorithm selection tables
      • Crate structure overview
    2. docs/ folder with detailed guides:

      • UNIFIED_API_GUIDE.md - Complete API usage guide
      • SECURITY_GUIDE.md - Security best practices
      • NIST_COMPLIANCE.md - Standards compliance details
      • DESIGN.md - Architecture and design decisions
      • DEPLOYMENT_GUIDE.md - Production deployment
      • FAQ.md - Frequently asked questions
    3. API documentation (docs.rs)

      • Auto-generated from doc comments
      • All public types and functions documented
      • Working code examples
    4. CONTRIBUTING.md - Development documentation

    5. SECURITY.md - Security policy and reporting

    6. CHANGELOG.md - Version history

    URLs:



    Проект ОБЯЗАН предоставлять справочную документацию, описывающую внешний интерфейс (как входной, так и выходной) программного обеспечения, создаваемого проектом. [documentation_interface]
    Документация внешнего интерфейса объясняет конечному пользователю или разработчику, как его использовать. Это может включать в себя интерфейс прикладного программирования (API), если программное обеспечение его имеет. Если это библиотека, документируйте основные классы/типы и методы/функции, которые можно вызвать. Если это веб-приложение, определите его URL-интерфейс (часто его интерфейс REST). Если это интерфейс командной строки, документируйте параметры и настройки, которые он поддерживает. Во многих случаях лучше всего, если большая часть этой документации будет автоматически сгенерирована, чтобы эта документация была синхронизирована с программным обеспечением по мере его изменения, но это не требуется. Проект МОЖЕТ использовать гипертекстовые ссылки для не-проектных материалов в качестве документации. Документация МОЖЕТ быть автоматически сгенерирована (там, где это применимо, это часто наилучший способ создания документации). Документация интерфейса REST может быть сгенерирована с использованием Swagger/OpenAPI. Документация по интерфейсу кода МОЖЕТ быть сгенерирована с использованием таких инструментов, как JSDoc (JavaScript), ESDoc (JavaScript), pydoc (Python), devtools (R), pkgdown (R) и Doxygen (многие языки). Просто иметь комментарии в коде реализации недостаточно для выполнения этого критерия; должен быть простой способ увидеть информацию без чтения всего исходного кода. Если проект не создает программное обеспечение, выберите «неприменимо» (N/A).

    The project provides reference documentation for all external interfaces:

    1. docs.rs API Reference (auto-generated from source):

      • All public functions with signatures
      • Parameter types and descriptions
      • Return types (EncryptedData, SignedData, Result<T>)
      • Error types and conditions
    2. Key Input/Output Documentation:

      Inputs:

      • CryptoConfig: SecurityLevel, UseCase, VerifiedSession
      • Key types: &[u8] for symmetric, PublicKey/PrivateKey for asymmetric
      • Data: &[u8] plaintext/message

      Outputs:

      • EncryptedData: { data, metadata, scheme, timestamp }
      • SignedData: { message, signature, public_key, scheme, timestamp }
      • Result<T, CoreError> with typed errors
    3. docs/UNIFIED_API_GUIDE.md:

      • Complete CryptoConfig builder documentation
      • SecurityLevel enum options and algorithm mappings
      • UseCase enum options and algorithm mappings
      • EncryptedData and SignedData structure reference
    4. Inline doc comments with # Arguments, # Returns, # Errors sections

    URLs:


  • Другое


    Сайты проекта (веб-сайт, репозиторий и URL-адреса для загрузки) ОБЯЗАНЫ поддерживать HTTPS с использованием TLS. [sites_https]
    Для выполнения этого критерия требуется, чтобы URL домашней страницы проекта начинался с "https:", а не "http:". Вы можете получить бесплатные сертификаты от проекта Let's Encrypt. Проекты МОГУТ выполнить этот критерий, используя (например) GitHub Pages, GitLab Pages или проектные страницы SourceForge. Если вы поддерживаете HTTP, мы настоятельно рекомендуем перенаправить HTTP-трафик на HTTPS.

    All project sites support HTTPS with TLS:

    1. Repository (GitHub):
      https://github.com/LatticeArc/latticearc

      • GitHub enforces HTTPS by default
      • HTTP redirects to HTTPS
      • TLS 1.2+ supported
    2. Package Registry (crates.io):
      https://crates.io/crates/latticearc

      • crates.io enforces HTTPS
      • All downloads over HTTPS
    3. Documentation (docs.rs):
      https://docs.rs/latticearc

      • docs.rs enforces HTTPS
    4. All URLs in README use HTTPS:

      • Badge URLs
      • Documentation links
      • External references

    URLs:



    Проект ОБЯЗАН иметь один или несколько механизмов для обсуждения (включая предлагаемые изменения и проблемы), которые доступны для поиска, позволяют ссылаться на сообщения и темы по URL, позволяют новым людям участвовать в некоторых обсуждениях и не требуют установки на стороне клиента проприетарного программного обеспечения. [discussion]
    Примерами приемлемых механизмов являются архивируемые списки рассылки, обсуждения в GitHub issues и pull requests, Bugzilla, Mantis и Trac. Асинхронные механизмы обсуждения (например, IRC) приемлемы, если они отвечают этим критериям; убедитесь, что есть механизм архивирования URL-адресов. Разрешено, хотя и не рекомендуется, использовать проприетарный JavaScript.

    The project uses GitHub for discussions, which meets all requirements:

    1. GitHub Issues:

      • Searchable: Full-text search across all issues
      • URL addressable: Each issue has unique URL (e.g., /issues/123)
      • Open participation: Anyone with GitHub account can participate
      • Web-based: No proprietary client required
    2. GitHub Pull Requests:

      • Searchable: Full-text search
      • URL addressable: Each PR has unique URL
      • Code review comments addressable by URL
      • Open for public comment
    3. GitHub Discussions (if enabled):

      • Q&A, announcements, general discussion
      • Searchable and URL addressable
      • Threaded conversations

    All mechanisms:

    • Work in any web browser
    • Require no proprietary software
    • Allow anonymous viewing
    • Enable participation with free GitHub account

    URL: https://github.com/LatticeArc/latticearc/issues



    Проекту СЛЕДУЕТ предоставлять документацию на английском языке и иметь возможность принимать отчеты об ошибках и комментарии о коде на английском языке. [english]
    Английский в настоящее время является лингва франка компьютерной техники; Поддержка английского языка увеличивает число потенциальных разработчиков и рецензентов во всем мире. Проект может соответствовать этому критерию, даже если английский не является основным языком его ключевых разработчиков.

    All project documentation and communication is in English:

    1. Documentation in English:

      • README.md
      • All docs/*.md files
      • CONTRIBUTING.md
      • SECURITY.md
      • CHANGELOG.md
      • Code comments and doc strings
      • API documentation (docs.rs)
    2. Bug Reports in English:

      • GitHub Issues accepts English submissions
      • Issue templates in English
      • Maintainers respond in English
    3. Code in English:

      • Variable/function names in English
      • Error messages in English
      • Log messages in English

    URL: https://github.com/LatticeArc/latticearc



    НЕОБХОДИМО, чтобы проект поддерживался. [maintained]
    Как минимум, проект должен пытаться реагировать на сообщения о серьезных проблемах и уязвимостях. Проект, который активно добивается получения значка, вероятно, и поддерживается тоже. Ресурсы любого проекта и человека ограничены, и обычно проекты будут отклонять некоторые предлагаемые изменения; поэтому ограниченность ресурсов и отклонение предложений сами по себе не указывают на то, что проект не поддерживается.

    Если известно, что проект больше не будет поддерживаться, следует установить для этого критерия значение «Не соответствует» и использовать подходящие механизмы, чтобы указать другим, что он не поддерживается. Например, используйте “DEPRECATED” («УСТАРЕЛ») в качестве первого заголовка в файле README, добавьте “DEPRECATED” в начале его домашней страницы, добавьте “DEPRECATED” в начало описания проекта репозитория кода, добавьте значок об отсутствии поддержки в README проекта и/или домашнюю страницу, пометьте его как устаревший в любых репозиториях пакетов (напр., npm deprecate ) и/или используйте механизм, предоставленный репозиторием кода для его архивирования (например, параметр "archive" у GitHub или пометка "archive" у GitLab, статус «только для чтения» у Gerrit или статус «брошенного» проекта у SourceForge). Дополнительное обсуждение можно найти здесь .

    The project is actively maintained:

    1. Recent Activity:

      • 52 commits in the last 30 days
      • Multiple commits daily
      • Active development on main branch
    2. Maintenance Activities:

      • Bug fixes (hybrid signature verification)
      • Security updates (CI hardening, Docker image pinning)
      • Documentation updates
      • Code cleanup (11,500 lines dead code removed)
      • Test improvements
      • Version releases (v0.1.0 → v0.1.1 → v0.1.2)
    3. Responsiveness:

      • Issues addressed promptly
      • Security policy in place (SECURITY.md)
      • Active CI/CD pipeline
    4. Future Roadmap:

      • Codebase audit plan documented
      • Ongoing improvements planned

    URL: https://github.com/LatticeArc/latticearc/commits/main


 Управление изменениями 9/9

  • Публичное хранилище исходного кода с поддержкой версий


    Проект ОБЯЗАН иметь репозиторий (хранилище) исходного кода с управлением версиями, который является общедоступным и имеет URL. [repo_public]
    URL МОЖЕТ быть таким же, как URL проекта. Проект МОЖЕТ использовать частные (непубличные) ветви в конкретных случаях, когда изменение не выпускается публично (например, для устранения уязвимости до того, как она будет открыта для публики).

    The project uses a public GitHub repository with Git version control:

    1. Version Control System: Git

      • Full commit history preserved
      • Branching and tagging support
      • Distributed version control
    2. Publicly Readable:

      • No authentication required to view
      • Source code browsable via web
      • Clone/download available to anyone
    3. Repository URL:

    4. Features:

      • Commit history visible
      • Blame/annotation available
      • Diff viewing
      • Branch/tag browsing

    URL: https://github.com/LatticeArc/latticearc



    Проектный репозиторий исходного кода ОБЯЗАН отслеживать, какие изменения были внесены, кто внес изменения и когда изменения были сделаны. [repo_track]

    Git version control automatically tracks all required information:

    1. What Changes Were Made:

      • Full diff for every commit
      • Line-by-line change tracking
      • File additions, modifications, deletions recorded
    2. Who Made the Changes:

      • Author name and email on every commit
      • Committer information preserved
      • GitHub links commits to user profiles
    3. When Changes Were Made:

      • Timestamp on every commit
      • Author date and commit date recorded
      • Full chronological history

    Example commit metadata:
    commit 32e85d4
    Author: Kalyan Amaresam <...>
    Date: Fri Jan 30 23:22:15 2026 -0500

     docs: Add comprehensive codebase audit plan                                                                                                                         
    

    Viewable via:
    - git log (command line)
    - GitHub web interface (commits page)
    - git blame (per-line attribution)

    URL: https://github.com/LatticeArc/latticearc/commits/main Repository on GitHub, which uses git. git can track the changes, who made them, and when they were made.



    Чтобы обеспечить возможность для проверки другими участниками, проектный репозиторий исходного кода ОБЯЗАН включать промежуточные версии для проверки между релизами; НЕДОПУСТИМО хранить в репозитории лишь финальные версии. [repo_interim]
    Проекты МОГУТ опускать отдельные промежуточные версии из своих публичных репозиториев (например, те, которые фиксируют отдельные не обнародованные уязвимости, никогда не будут публично выпущены или включают материалы, которые не могут быть опубликованы на законных основаниях и не находятся в финальной версии).

    The repository includes complete development history, not just releases:

    1. All Commits Visible:

      • Every individual commit is preserved
      • Development work between releases is tracked
      • 52+ commits in last 30 days (not just release tags)
    2. Interim Development:

      • Feature branches for work-in-progress
      • Individual commits for incremental changes
      • Pull requests show proposed changes before merge
    3. Release vs Development:

      • v0.1.0 (Jan 29) → 20+ commits → v0.1.1 (Jan 30) → 10+ commits → v0.1.2 (Jan 30)
      • All intermediate commits available for review
    4. Example Interim Commits:

      • "test(arc-core): Add comprehensive unified API tests"
      • "ci: Pin Docker base image by hash"
      • "docs: Clarify Apache vs Enterprise feature scope"

      These are development commits, not releases.

    URL: https://github.com/LatticeArc/latticearc/commits/main



    Для хранилища проектного исходного кода ЖЕЛАТЕЛЬНО использовать типовое ПО для распределенного управления версиями (например, git). [repo_distributed]
    Не требуется именно git, и проекты могут использовать централизованное программное обеспечение для управления версиями (например, Subversion) с обоснованием.

    The project uses Git, the most widely-used distributed version control system:

    1. Version Control: Git

      • Distributed architecture
      • Full history on every clone
      • Offline commit capability
      • Industry standard
    2. Hosting: GitHub

      • Built on Git
      • Web interface for collaboration
      • Pull request workflow
      • Issue tracking integration
    3. Benefits:

      • Anyone can fork and contribute
      • Full redundancy (every clone is a backup)
      • Branching/merging workflow
      • Wide tooling support

    Git market share: ~95% of developers use Git (Stack Overflow surveys)

    URL: https://github.com/LatticeArc/latticearc Repository on GitHub, which uses git. git is distributed.


  • Уникальная нумерация версий


    Результаты проекта ОБЯЗАНЫ иметь уникальный идентификатор версии для каждой версии, предназначенной для конечных пользователей. [version_unique]
    Это МОЖНО выполнить различными способами, включая идентификаторы коммита (например, идентификатор коммита git или идентификатор набора изменений mercurial) или номер версии (включая номера версий, которые используют семантическое версионирование или схемы на основе даты, такие как YYYYMMDD).

    The project uses Semantic Versioning (SemVer) with unique identifiers:

    1. Version Format: MAJOR.MINOR.PATCH

      • v0.1.0 - Initial release (Jan 29, 2026)
      • v0.1.1 - Bug fixes (Jan 30, 2026)
      • v0.1.2 - Dead code cleanup (Jan 30, 2026)
    2. Version Sources:

      • Cargo.toml: version = "0.1.2"
      • Git tags for releases
      • CHANGELOG.md documents each version
      • crates.io publishes with version
    3. Uniqueness Guaranteed:

      • SemVer ensures no duplicate versions
      • crates.io prevents version reuse
      • Git tags are immutable
    4. Workspace Version:

      • Single version in [workspace.package]
      • All crates share same version
      • Consistent across entire project

    URL:



    Для выпусков ЖЕЛАТЕЛЬНО использовать семантическую либо календарную нумерацию версий. При использовании календарной нумерации к версии ЖЕЛАТЕЛЬНО добавлять микро-компоненту. [version_semver]
    МОЖНО использовать в качестве номеров версий другие схемы нумерации версий, такие как идентификаторы коммитов (например, идентификатор коммита в git или идентификатор набора изменений в mercurial) или схемы на основе даты, такие как YYYYMMDD, поскольку они уникальны. Некоторые альтернативы могут вызвать трудности, поскольку пользователи могут быть не в состоянии легко определить, используют ли они последнюю версию. SemVer может оказаться менее полезным для идентификации версий программного обеспечения, если все получатели используют только последнюю версию (например, это код для одного веб-сайта или интернет-сервиса, который постоянно обновляется с помощью непрерывной доставки).


    Проектам ЖЕЛАТЕЛЬНО идентифицировать каждый выпуск в своей системе управления версиями. Например, при использовании git ЖЕЛАТЕЛЬНО идентифицировать каждую версию, используя теги git. [version_tags]

    The project uses git tags to identify releases:

    1. Git Tags Used:

      • v0.1.1 - "Fix hybrid signature verification and SecurityLevel docs"
    2. Tag Format:

      • Prefix: v
      • SemVer version number
      • Annotated with release description
    3. Note:

      • v0.1.0 and v0.1.2 tags should be added for completeness
      • Tagging process should be part of release checklist

    Tags viewable at:
    - git tag -l (command line)
    - GitHub Releases page

    URL: https://github.com/LatticeArc/latticearc/tags


    Recommendation: Add missing tags for consistency:
    git tag -a v0.1.0 <commit-hash> -m "v0.1.0: Initial release"
    git tag -a v0.1.2 <commit-hash> -m "v0.1.2: Dead code cleanup"
    git push origin --tags


  • Примечания к выпуску


    Проект ОБЯЗАН предоставлять с каждой выпускаемой версией замечания к выпуску - удобочитаемые человеком сведения об основных изменениях в этом выпуске, помогающие пользователям определить, должны ли они обновляться и какими будут последствия обновления. НЕДОПУСТИМО делать замечания к выпуску сырым выводом журнала управления версиями (например, результаты команды «git log» не являются замечаниями к выпуску). Проекты, результаты которых не предназначены для повторного использования в нескольких местах (например, программное обеспечение для одного веб-сайта или службы) И выдаются через непрерывную доставку (continuous delivery) МОГУТ выбрать «неприменимо» (N/A). (Требуется URL) [release_notes]
    Замечания к выпуску МОГУТ быть реализованы различными способами. Многие проекты предоставляют их в файле с именем «NEWS», «CHANGELOG» или «ChangeLog», возможно с расширениями, такими как «.txt», «.md» или «.html». Исторически термин «журнал изменений» означал журнал для каждого изменения, но для соответствия этим критериям требуется человекочитаемая сводка. Замечания к выпуску МОГУТ вместо этого быть предоставлены механизмами системы контроля версий, такими как процесс GitHub Releases.

    The project provides human-readable release notes in CHANGELOG.md:

    1. Format: Keep a Changelog (https://keepachangelog.com/)

      • Not raw git log output
      • Organized by category: Added, Changed, Fixed, Removed
      • Human-written summaries
    2. Content for Each Release:

      • Version number and date
      • Summary of major changes
      • Impact on users
      • Migration notes when needed
    3. Example (v0.1.2):

      [0.1.2] - 2026-01-30

      Removed

      • Dead Code Cleanup: Removed ~11,500 lines of unreachable code

      Added

      • Unified API Tests: Comprehensive test coverage

      Changed

      • Documentation: Clarified Apache vs Enterprise scope

      Notes

      • Explains what was removed and why
      • No breaking changes for users
    4. Helps Users Decide:

      • Breaking changes highlighted
      • Security fixes noted
      • New features listed
      • Deprecations documented

    URL: https://github.com/LatticeArc/latticearc/blob/main/CHANGELOG.md



    В замечаниях о выпуске НЕОБХОДИМО упоминать каждую общеизвестную уязвимость, исправленную ​​в каждой новой версии, для которой существует CVE или аналогичная публичная запись. Критерий может быть отмечен как неприменимый (N/A), если у пользователей обычно нет практической возможности обновить данное ПО самостоятельно (это часто относится к, например, обновлениям ядра операционной системы). Если замечаний о выпуске не публиковалось или не было обнародованных уязвимостей, отвечайте "неприменимо". [release_notes_vulns]
    Этот критерий помогает пользователям определить, исправит ли данное обновление общеизвестную уязвимость, чтобы помочь пользователям принять обоснованное решение об обновлении. Если пользователи обычно не могут практически самостоятельно обновлять программное обеспечение на своих компьютерах, а вместо этого должны полагаться на одного или нескольких посредников для выполнения обновления (как это часто бывает с ядром и низкоуровневым программным обеспечением, которое взаимосвязано с ядром), проект вместо этого можно выбрать «Неприменимо», поскольку эта дополнительная информация будет бесполезна для таких пользователей. Аналогично, проект может выбрать «неприменимо» (N/A), если все получатели используют только последнюю версию (например, это код для одного веб-сайта или интернет-службы, который постоянно обновлен при помощи непрерывной доставки). Этот критерий применим только к результатам проекта, а не к его зависимостям. Перечисление уязвимостей всех транзитивных зависимостей проекта становится громоздким, поскольку зависимости увеличиваются и изменяются; и в этом нет необходимости, поскольку инструменты, которые исследуют и отслеживают зависимости, могут делать это более масштабируемым способом.

    Not applicable - No publicly known vulnerabilities:

    1. Project Status:

      • Pre-1.0 software (v0.1.2)
      • Initial release: January 29, 2026
      • No CVEs have been filed against LatticeArc
    2. No Vulnerabilities to Report:

      • No CVE assignments for this project
      • No security advisories issued
      • No known run-time vulnerabilities
    3. Future Commitment:

      • SECURITY.md documents vulnerability reporting process
      • CHANGELOG.md will document CVE fixes when applicable
      • Security fixes will be categorized under "### Security" section
    4. Verification:

      • No entries in NVD for "latticearc"
      • No GitHub Security Advisories for this repo

    URL: https://github.com/LatticeArc/latticearc/blob/main/SECURITY.md


 Отчеты о проблемах 8/8

  • Процесс сообщения об ошибках


    Проект ОБЯЗАН предоставить пользователям возможность отправлять сообщения об ошибках (например, используя систему отслеживания ошибок или список рассылки). (Требуется URL) [report_process]

    The project uses GitHub Issues for bug reports:

    1. Issue Tracker:

      • GitHub Issues enabled on repository
      • Publicly accessible
      • No account fee required (free GitHub account)
    2. Features:

      • Bug report templates (if configured)
      • Labels for categorization (bug, enhancement, etc.)
      • Assignees and milestones
      • Search and filtering
    3. Process:

      • Users click "New Issue"
      • Select issue type (bug report)
      • Fill in description, steps to reproduce
      • Submit for maintainer review
    4. Documentation:

      • CONTRIBUTING.md references issue tracker
      • README links to issues
      • SECURITY.md for security vulnerabilities (separate process)

    URL: https://github.com/LatticeArc/latticearc/issues



    СЛЕДУЕТ использовать трекер вопросов (issue tracker) для отслеживания отдельных вопросов. [report_tracker]

    The project uses GitHub Issues as its issue tracker:

    1. Issue Tracker: GitHub Issues

      • Integrated with repository
      • Full-featured issue tracking
      • Free and publicly accessible
    2. Tracking Features:

      • Unique issue numbers (#1, #2, etc.)
      • Open/closed status
      • Labels (bug, enhancement, documentation, etc.)
      • Milestones for release planning
      • Assignees for ownership
      • Cross-references between issues and PRs
    3. Organization:

      • Search and filter capabilities
      • Sort by date, comments, reactions
      • Project boards for workflow (if enabled)
    4. Integration:

      • Links to commits that fix issues
      • Auto-close issues via commit messages
      • PR references to related issues

    URL: https://github.com/LatticeArc/latticearc/issues



    Проект ОБЯЗАН подтверждать получение большинства сообщений об ошибках, отправленных за последние 2-12 месяцев (включительно); подтверждение не обязательно включает исправление. [report_responses]

    The project acknowledges bug reports:

    1. Current Status:

      • Project is newly released (v0.1.0 on Jan 29, 2026)
      • No external bug reports submitted yet
      • No issues pending response
    2. Response Commitment:

      • Maintainers actively monitor issues
      • CONTRIBUTING.md encourages issue submission
      • Response expected within reasonable timeframe
    3. Evidence of Responsiveness:

      • Internal issues addressed promptly
      • Active development (52 commits in 30 days)
      • Same-day fixes for discovered issues (e.g., v0.1.1 hybrid signature fix)
    4. Process in Place:

      • GitHub Issues enabled
      • Notifications configured
      • Maintainers committed to engagement

    Note: As a new project, 100% of bug reports (0 of 0) have been acknowledged.

    URL: https://github.com/LatticeArc/latticearc/issues



    Проекту СЛЕДУЕТ реагировать на большинство (>50%) запросов на улучшения в течение последних 2-12 месяцев (включительно). [enhancement_responses]
    В качестве ответа МОЖЕТ быть «нет» или обсуждение выгод от данного улучшения. Цель состоит в том, чтобы по крайней мере на некоторые запросы был какой-то ответ, что указывает на то, что проект все еще жив. Для целей этого критерия не нужно учитывать поддельные запросы (например, от спамеров или автоматизированных систем). Если проект больше не принимает улучшения, выберите «не соответствует» и укажите URL, проясняющий ситуацию для пользователей. Если проект большую часть времени перегружен количеством запросов на улучшения, выберите «не cоответствует» и объясните.

    LatticeArc is a newly public project (v0.1.0 released 2026-01-29), so the 2-12 month window has minimal data. However:

    1. Active development - 3 releases in 2 days demonstrates high responsiveness
    2. GitHub Issues enabled - Public tracker for enhancement requests
    3. Responsive to feedback - CHANGELOG shows rapid iteration on user-facing improvements (SecurityLevel redesign, API fixes, documentation updates)


    Проект ОБЯЗАН иметь общедоступный архив для отчетов и ответов для последующего поиска. (Требуется URL) [report_archive]

    GitHub Issues provides a publicly accessible, searchable archive of all bug reports, enhancement requests, and their responses.
    URL: https://github.com/latticearc/latticearc/issues


  • Процесс отчета об уязвимостях


    Проект ОБЯЗАН публиковать процесс уведомления об уязвимостях на сайте проекта. (Требуется URL) [vulnerability_report_process]
    Например, четко обозначенный почтовый адрес на https://PROJECTSITE/security, часто в форме security@example.org. Процесс МОЖЕТ быть таким же, как и процесс для отчетов об ошибках. Отчеты об уязвимостях МОГУТ быть всегда общедоступными, но многие проекты имеют приватный механизм для отправки отчетов об уязвимостях.

    SECURITY.md documents the full vulnerability reporting process including private email (Security@LatticeArc.com), GitHub Security Advisory, response timelines, and coordinated disclosure policy.
    URL: https://github.com/latticearc/latticearc/blob/main/SECURITY.md



    Если поддерживаются приватные отчеты об уязвимости, проект ОБЯЗАН включить описание того, как отправлять сведения конфиденциальным способом. (Требуется URL) [vulnerability_report_private]
    Примеры включают приватный отчет о дефектах, отправленный в Интернете с использованием HTTPS (TLS) или электронной почты, зашифрованной с использованием OpenPGP. Если отчеты об уязвимостях всегда являются общедоступными (поэтому нет приватных отчетов об уязвимостях), выберите «неприменимо» (N/A).

    SECURITY.md explicitly directs reporters away from public issues and provides two private channels: email (Security@LatticeArc.com) and GitHub Security Advisories.
    URL: https://github.com/latticearc/latticearc/blob/main/SECURITY.md



    Проект ОБЯЗАН обеспечивать время первоначального отклика на любой отчет об уязвимости, полученный за последние 6 месяцев, в пределах 14 дней или меньше. [vulnerability_report_response]
    Если за последние 6 месяцев не было обнаружено никаких уязвимостей, выберите «неприменимо» (N/A).

    SECURITY.md commits to 24-hour initial acknowledgment, well under the 14-day requirement. Project is newly public (January 2026) with no vulnerability reports received yet, but the response policy is documented and maintainers are committed to meeting these timelines


 Качество 13/13

  • Рабочая система сборки


    Если программное обеспечение, создаваемое проектом, требует сборки для использования, проект ОБЯЗАН предоставить рабочую систему сборки, которая может автоматически пересобирать программное обеспечение из исходного кода. [build]
    Система сборки определяет, какие действия необходимо предпринять для пересборки программного обеспечения (и в каком порядке), а затем выполняет эти действия. Например, она может вызывать компилятор для компиляции исходного кода. Если исполняемый файл создается из исходного кода, должна иметься возможность изменить исходный код проекта, а затем сгенерировать обновленный исполняемый файл с этими изменениями. Если программное обеспечение, создаваемое проектом, зависит от внешних библиотек, система сборки не обязана пересобирать эти внешние библиотеки. Если для использования программного обеспечения после изменения его исходного кода пересборка не требуется, выберите «неприменимо» (N/A).

    Uses Cargo (Rust's standard build system). Single command cargo build --workspace rebuilds entire project from source. Workspace Cargo.toml coordinates all crates, Cargo.lock ensures reproducible dependencies.



    ЖЕЛАТЕЛЬНО использовать общеупотребительные инструменты для сборки программного обеспечения. [build_common_tools]
    Например, Maven, Ant, cmake, autotools, make, rake или devtools (R).

    Uses Cargo, the official Rust build system included with every Rust installation. No custom build tooling required. Additional common Rust ecosystem tools (cargo-audit, cargo-deny, cargo-fuzz) used for security and quality.



    Для сборки проекта СЛЕДУЕТ использовать только инструменты со свободными лицензиями. [build_floss_tools]

    Entire build chain is FLOSS. Rust toolchain (rustc, cargo) is MIT/Apache-2.0. All dependencies verified FLOSS via deny.toml which explicitly allows only MIT, Apache-2.0, BSD, ISC, CC0, MPL-2.0 licenses. No proprietary tools required.


  • Набор автотестов


    Проект ОБЯЗАН использовать по крайней мере один автоматизированный набор тестов, опубликованный как свободное ПО (этот набор тестов может поддерживаться как отдельный проект свободного ПО). Проект ОБЯЗАН ясно показывать или иметь документацию о том, как запускать наборы тестов (например, через непрерывную интеграцию (CI) или используя файлы документации, такие как BUILD.md, README.md или CONTRIBUTING.md). [test]
    Проект МОЖЕТ использовать несколько автоматизированных наборов тестов (например, один, который работает быстро, а другой - более тщательный, но требует специального оборудования). Существует множество каркасов (frameworks) и систем поддержки тестирования, включая Selenium (автоматизация веб-браузера), Junit (JVM, Java), RUnit (R), testthat (R).

    Uses Cargo's built-in test framework (MIT/Apache-2.0) plus proptest for property-based testing. Test commands documented in README.md (cargo test --workspace --all-features). CI automatically runs full test suite on every pull request via GitHub Actions.



    Запуск набора тестов СЛЕДУЕТ реализовывать стандартным способом для этого языка. [test_invocation]
    Например, «make check», «mvn test» или «rake test» (Ruby).

    Uses cargo test, the universal standard for Rust projects. No custom test harness or non-standard invocation required. All standard Cargo test flags and conventions work as expected.



    ЖЕЛАТЕЛЬНО охватывать набором тестов большинство (а в идеале все) ветви кода, поля ввода и функциональные возможности. [test_most]

    Targets 80% code coverage. Uses multiple strategies: unit tests, integration tests, property-based testing (proptest), NIST CAVP validation vectors, and fuzz testing. All cryptographic primitives have roundtrip and negative tests. Coverage measured via cargo-llvm-cov



    ЖЕЛАТЕЛЬНО реализовать непрерывную интеграцию (Continuous Integration - частая интеграция нового или измененного кода в центральное хранилище кода, и запуск автоматических тестов на получившейся базе кода). [test_continuous_integration]

    GitHub Actions runs full CI on every push and pull request. Pipeline includes build, test, clippy linting, format checking, security audit (cargo-audit), and dependency verification (cargo-deny). Daily scheduled fuzzing. PRs cannot merge until all checks pass.


  • Тестирование новых функций


    Проект ОБЯЗАН иметь общую политику (формальную или нет), обязывающую добавлять тесты в набор автоматических тестов по мере добавления новых функциональных возможностей к программному обеспечению, создаваемому проектом. [test_policy]
    Если есть действующая политика, хотя бы «из уст в уста», которая говорит, что разработчики должны добавлять тесты в набор автотестов для новой функциональности, указывайте «соответствует».

    CONTRIBUTING.md explicitly requires tests for new functionality: 'Each PR should include tests for new functionality' and 'All public APIs must have tests.' PR template has test checkboxes, and CI blocks merging until tests pass. Coverage targets: 90% unit, 80% overall.



    Проект ОБЯЗАН иметь доказательства того, что критерий test_policy о добавлении тестов соблюдался при недавних крупных изменениях ПО, создаваемого проектом. [tests_are_added]
    Крупная функциональность обычно упоминается в замечаниях к выпуску. Совершенство не требуется, просто доказательство того, что на практике тесты обычно добавляются в набор автотестов, когда к ПО, создаваемому проектом, добавляются новые крупные функции.

    Recent commits demonstrate test policy adherence. Example: commit 00da0fd added 6 comprehensive tests for new unified API functionality. CHANGELOG documents test additions for each release. PR process enforces test requirements via template checklist and CI.



    ЖЕЛАТЕЛЬНО задокументировать эту политику добавления тестов (см. критерий test_policy) в инструкции к предложениям об изменениях. [tests_documented_added]
    Однако даже неформальное правило приемлемо, если тесты добавляются на практике.

    Test policy is documented in CONTRIBUTING.md with a dedicated 'Testing Requirements' section specifying coverage thresholds and test categories. PR template includes testing checklist that contributors must complete before submitting changes.


  • Флаги предупреждений


    Проект ОБЯЗАН включать один или несколько предупреждающих флагов компилятора, «безопасный» языковой режим или использовать отдельный инструмент «linter» для поиска ошибок качества кода или типовых простых ошибок, если есть хотя бы один инструмент на свободном ПО, который может реализовать этот критерий на выбранном языке. [warnings]
    Примером предупреждающего флага компилятора может служить "-Wall" для gcc/clang. Примеры «безопасного» языкового режима включают «use strict» в JavaScript и «use warnings» в perl5. Отдельный инструмент «linter» - это просто инструмент, который исследует исходный код для поиска ошибок качества кода или типовых простых ошибок. Всё это обычно включается в исходный код или инструкции сборки.

    Extensive lint configuration in Cargo.toml: unsafe_code is forbidden, 80+ Clippy rules at deny/warn level. CI runs cargo clippy -- -D warnings blocking merge on
    any warning. Rust's memory-safe design plus #![forbid(unsafe_code)] enforces safe language mode.



    Проект ОБЯЗАН обращать внимание на предупреждения. [warnings_fixed]
    Речь о предупреждениях, найденных при выполнении критерия warnings. Проект должен исправлять предупреждения или отмечать их в исходном коде как ложные срабатывания. В идеале не должно быть никаких предупреждений, но проект МОЖЕТ принимать существование каких-то предупреждений (обычно менее 1 предупреждения на 100 строк или менее 10 предупреждений).

    Zero warnings in current codebase (verified with cargo clippy -- -D warnings). CI treats warnings as errors, blocking PRs with warnings. Commit history shows
    active warning remediation (e.g., 'fix: Resolve clippy field_reassign_with_default'). Warnings are fixed promptly, not suppressed.



    ЖЕЛАТЕЛЬНО, чтобы проекты использовали самый строгий режим предупреждений в производимом ПО, где это целесообразно. [warnings_strict]
    Некоторые предупреждения не могут быть эффективно задействованы в некоторых проектах. Что необходимо в этом критерии - это доказательства того, что проект стремится включать флаги предупреждений там, где это возможно, чтобы ошибки обнаруживались на ранней стадии.

    Maximally strict configuration for cryptographic code. Uses forbid (non-overridable) for unsafe_code, deny (compile error) for 40+ lint rules including panic,
    unwrap, indexing. Only allows warn level where crypto algorithms require specific behavior (e.g., modular arithmetic). 80+ Clippy rules configured beyond defaults.


 Безопасность 16/16

  • Знание безопасной разработки


    По крайней мере один основной разработчик на проекте ОБЯЗАН знать, как проектировать безопасное программное обеспечение (точные требования описаны в подробностях к критерию). [know_secure_design]
    Это требует понимания следующих принципов проектирования, в том числе 8 принципов из Saltzer and Schroeder:
    • экономичность механизма (поддерживать дизайн ПО настолько простым и компактным, насколько практически возможно, например, с помощью массовых упрощений)
    • отказобезопасные значения по умолчанию (доступ по умолчанию должен быть запрещен, а установка проектов по умолчанию должна быть в защищенной конфигурации)
    • полное разграничение (любой доступ, который может быть ограничен, должен проверяться на достаточность прав доступа и не иметь обходных путей)
    • открытый дизайн (механизмы безопасности должны полагаться не на незнание их злоумышленником, а на данные типа ключей и паролей, которые проще защищать и менять)
    • разделение привилегий (в идеале доступ к важным объектам должен зависеть от более чем одного условия, так чтобы взлом одной системы защиты не приводил к полному доступу; напр., многофакторная аутентификация с требованием и пароля, и аппаратного токена сильнее однофакторной)
    • минимальные привилегии (процессы должны работать с минимальными привилегиями, необходимыми для выполнения ими своих функций)
    • наименьший общий механизм (дизайн должен минимизировать механизмы, общие для нескольких пользователей и следовательно зависящие от всех этих пользователей, например, каталоги для временных файлов)
    • психологическая приемлемость (интерфейс для человека должен быть спроектирован с учетом удобства использования - может быть полезным проектирование для «наименьшего удивления»)
    • ограничение периметра атаки (периметр атаки - множество разных точек, в которых злоумышленник может попытаться ввести или извлечь данные - должен быть ограничен)
    • проверка входных данных с помощью списков на допуск (входы обычно должны проверяться на корректность до их принятия; эта проверка должна использовать списки на допуск, содержащие только заведомо хорошие значения, а не списки на запрет, пытающиеся перечислить заведомо плохие значения).
    «Основной разработчик» в проекте - это любой, кто знаком с базой кода проекта, без затруднений может вносить в него изменения и признан таковым большинством других участников проекта. Основной разработчик, как правило, неоднократно вносит вклад в течение последнего года (через код, документацию или ответы на вопросы). Разработчики обычно считаются основными разработчиками, если это они начали проект (и не покинули проект более трех лет назад), имеют возможность получать информацию по закрытому каналу для отчетов об уязвимостях (если он есть), могут принимать коммиты от имени проекта или делать финальные выпуски программного обеспечения проекта. Если есть только один разработчик, этот человек является основным разработчиком. Есть много книг и курсов, помогающих понять, как разрабатывать более безопасное ПО, с обсуждением вопросов проектирования. Например, Secure Software Development Fundamentals - это бесплатный набор из трех курсов, объясняющих, как разрабатывать более безопасное ПО (бесплатный для обучения; за отдельную плату вы можете получить сертификат для подтверждения, что вы освоили материал).

    Primary developers demonstrate secure design expertise through: cryptographic architecture following NIST FIPS 203-206, memory-safe Rust with forbidden unsafe code, constant-time operations for secrets, zeroization of sensitive data, comprehensive security documentation with threat model, and secure-by-default configuration.



    По крайней мере, один из основных разработчиков проекта ОБЯЗАН знать об общих видах ошибок, которые приводят к уязвимостям в этом виде программного обеспечения, а также по крайней мере одному методу противодействия или смягчения каждого из них. [know_common_errors]
    Примеры (в зависимости от типа ПО) включают внедрение SQL-кода (injection), внедрение на уровне ОС, классическое переполнение буфера, межсайтовый скриптинг, отсутствие проверки подлинности и отсутствие авторизации. Обычно используемые списки уязвимостей можно найти в CWE/SANS top 25 или OWASP Top 10. Есть много книг и обучающих курсов, помогающих понять, как разрабатывается безопасное программное обеспечение, и обсуждающих типичные ошибки в реализации, ведущие к уязвимостям. К примеру, Secure Software Development Fundamentals - это набор из трех курсов, объясняющих, как сделать разрабатываемое ПО более безопасным (бесплатный для прослушивания; за дополнительную плату вы можете получить справку о том, что прошли его).

    Developers demonstrate knowledge of cryptographic vulnerabilities: timing attacks (mitigated via subtle crate), memory leaks (zeroize crate), buffer overflows (safe indexing, Rust bounds), panics (deny lint + Result types), weak crypto (NIST FIPS only). SECURITY.md and CONTRIBUTING.md document prohibited patterns and required mitigations.


  • Основы правильного использования криптографии

    Обратите внимание, что некоторое ПО не нуждается в использовании криптографических механизмов.

    Программное обеспечение, созданное проектом, ОБЯЗАНО использовать по умолчанию только публикуемые криптографические протоколы и алгоритмы, которые анализируются экспертами (если используются криптографические протоколы и алгоритмы). [crypto_published]
    Эти криптографические критерии не всегда применяются, поскольку некоторые программы не нуждаются в прямом использовании криптографических возможностей.

    All cryptographic algorithms are NIST FIPS or IETF RFC standards: ML-KEM (FIPS 203), ML-DSA (FIPS 204), SLH-DSA (FIPS 205), AES-GCM (FIPS 197), SHA-2/3 (FIPS 180/202), Ed25519 (RFC 8032), HKDF (RFC 5869). No proprietary algorithms. All underwent extensive public cryptanalysis.



    Если программное обеспечение, создаваемое проектом, является приложением или библиотекой, и его основной целью является не внедрение криптографии, тогда для реализации криптографических функций СЛЕДУЕТ обращаться к программному обеспечению, специально предназначенному для этого; НЕ СЛЕДУЕТ повторно реализовывать свои собственные функции. [crypto_call]

    LatticeArc's primary purpose IS cryptography. However, it follows the spirit: no custom primitives are implemented. All algorithms use audited crates (aws-lc-rs FIPS 140-3 validated, RustCrypto audited). LatticeArc provides API unification and hybrid composition, not novel crypto algorithms.



    Вся функциональность программного обеспечения, создаваемого проектом, которая зависит от криптографии, ОБЯЗАНА быть реализована с использованием свободного ПО. [crypto_floss]

    All cryptographic functionality uses FLOSS libraries: aws-lc-rs (Apache-2.0), fips204/205 (MIT/Apache-2.0), ed25519-dalek (BSD-3), RustCrypto crates (MIT/Apache-2.0). License compliance enforced via deny.toml. No proprietary crypto dependencies.



    Механизмы безопасности в программном обеспечении, создаваемом проектом, ОБЯЗАНЫ использовать стандартные длины криптографических ключей, которые, по крайней мере, соответствуют минимальным требованиям NIST до 2030 года (как указано в 2012 году). Проект ОБЯЗАН предоставлять возможность настройки ПО таким образом, чтобы уменьшенные длины ключей были полностью отключены. [crypto_keylength]
    Эти минимальные длины в битах перечислены далее: симметричный ключ - 112, модуль факторизации - 2048, дискретный логарифмический ключ - 224, дискретная логарифмическая группа - 2048, эллиптическая кривая - 224 и хеш - 224 (хеширование пароля не покрывается этой длиной, больше информации о хешировании пароля можно найти в описании критерия crypto_password_storage). См. http://www.keylength.com для сравнения рекомендаций по длинам криптографических ключей от различных организаций. Программное обеспечение МОЖЕТ допускать меньшие длины ключей в некоторых конфигурациях (в идеале не должно, поскольку это позволяет атаки через понижение длины ключа, но иногда требуется более короткая длина ключа для обеспечения взаимодействия с другими системами).

    Defaults exceed NIST 2030 requirements: AES-256 (vs 128 min), P-256 (vs P-224 min), SHA-256 (vs SHA-224 min). Default is 'High' security level (NIST Level 3 / 192-bit). Weak algorithms not offered: no AES-128, no P-192, no SHA-1. Post-quantum algorithms (ML-KEM, ML-DSA) meet NIST FIPS standards.



    Механизмы безопасности по умолчанию в программном обеспечении, создаваемом проектом, НЕДОПУСТИМО делать зависимыми от взломанных криптографических алгоритмов (например, MD4, MD5, single DES, RC4, Dual_EC_DRBG) или использовать режимы шифрования, которые не подходят для контекста, если только они не требуются для интероперабельности протокола (поддерживающего самую новую версию стандарта на этот протокол, широко распространенного в сетевой экосистеме, причем эта экосистема требует использования данного алгоритма или режима, не предлагая более безопасных альтернатив). В документации НЕОБХОДИМО описать все связанные с этим риски безопасности и все известные способы смягчения рисков, если данные алгоритмы или режимы действительно нужны для совместимости с другими реализациями этого протокола. [crypto_working]
    Режим ECB почти никогда не подходит, потому что внутри зашифрованного ECB текста обнаруживаются идентичные блоки, как можно видеть на примере «пингвина ECB», а режим CTR часто неприемлем, поскольку не выполняет аутентификацию и приводит к дубликатам, контекста, если состояние ввода повторяется. Во многих случаях лучше всего выбирать режим алгоритма с блочным шифром, предназначенный для сочетания секретности и аутентификации, например, Galois / Counter Mode (GCM) и EAX. Проекты МОГУТ разрешать пользователям включать сломанные механизмы, где это необходимо для совместимости, но в таких случаях пользователи знают, что они это делают.

    No broken algorithms available: no MD4/MD5/SHA-1, no DES/3DES/RC4, no Dual_EC_DRBG. Only authenticated encryption modes (AES-GCM, ChaCha20-Poly1305) - no ECB or unauthenticated CBC. Fresh codebase with no legacy interoperability requirements. Only NIST FIPS and IETF RFC approved algorithms.



    Механизмы безопасности по умолчанию в программном обеспечении, создаваемом проектом, НЕ СЛЕДУЕТ делать зависимыми от криптографических алгоритмов или режимов с известными серьезными слабостями (например, криптографический алгоритм хеширования SHA-1 или режим CBC в SSH). [crypto_weaknesses]
    Проблемы, связанные с режимом CBC в SSH, обсуждаются в описании уязвимости CERT: SSH CBC.

    All algorithms are current standards without known weaknesses: AES-256-GCM, ChaCha20-Poly1305, ML-KEM/ML-DSA/SLH-DSA (NIST 2024), SHA-256/SHA-3, Ed25519, P-256. Default hybrid mode provides defense-in-depth. cargo-audit monitors for vulnerabilities in CI.



    В механизмах безопасности в программном обеспечении, создаваемом проектом, СЛЕДУЕТ реализовать совершенную прямую секретность для протоколов соглашений о ключах, чтобы ключ сеанса, произведенный из набора долгосрочных ключей, не мог быть скомпрометирован, если один из долгосрочных ключей скомпрометирован в будущем. [crypto_pfs]

    Perfect Forward Secrecy achieved through ephemeral key encapsulation. Each encryption uses fresh ML-KEM/ECDH encapsulation to derive session keys. Long-term keys are signing-only (identity). TLS integration via rustls defaults to PFS cipher suites. Compromise of signing keys cannot reveal past session keys.



    Если ПО, создаваемое проектом, требует хранить пароли для аутентификации внешних пользователей, НЕОБХОДИМО хранить пароли как итерированные хеши с солью для каждого пользователя с использованием алгоритма (итерированного) растяжения ключа (например, PBKDF2, Bcrypt или Scrypt). См. также: OWASP Password Storage Cheat Sheet (на англ.). [crypto_password_storage]
    Этот критерий применяется только тогда, когда программное обеспечение требует проверки внешних пользователей с использованием паролей (так называемая входящая аутентификация), таких как серверные веб-приложения. Он не применяется в тех случаях, когда программное обеспечение хранит пароли для аутентификации в других системах (исходящая аутентификация; например, программное обеспечение реализует клиент для какой-либо другой системы), поскольку по крайней мере части этого программного обеспечения должны часто обращаться к нехешированному паролю.

    LatticeArc is a cryptographic library that does not store user passwords. However, it provides PBKDF2 (in arc-primitives/kdf/pbkdf2.rs) for applications requiring password-based key derivation with salt and configurable iterations, following OWASP Password Storage Cheat Sheet recommendations.



    Механизмы безопасности в программном обеспечении, создаваемом проектом, ОБЯЗАНЫ генерировать все криптографические ключи и временные значения с использованием криптографически безопасного генератора случайных чисел; НЕДОПУСТИМО делать это с использованием генераторов, которые криптографически небезопасны. [crypto_random]
    Криптографически безопасный генератор случайных чисел может быть аппаратным генератором случайных чисел или криптографически безопасным генератором псевдослучайных чисел (CSPRNG), использующим такие алгоритмы как Hash_DRBG, HMAC_DRBG, CTR_DRBG, Yarrow или Fortuna. Примеры вызовов защищенных генераторов случайных чисел включают java.security.SecureRandom в Java и window.crypto.getRandomValues в JavaScript. Примеры вызовов небезопасных генераторов случайных чисел включают java.util.Random в Java и Math.random в JavaScript.

    All keys and nonces generated via CSPRNG. Uses getrandom (OS entropy), rand with std_rng (ChaCha12), and aws-lc-rs (FIPS 140-3 validated DRBG). Dedicated Csprng type in arc-primitives. No insecure RNGs (no time-based seeds, no SmallRng for crypto). Fresh random nonces/IVs per operation.


  • Доставка, защищенная от атак посредника (MITM)


    Проект ОБЯЗАН использовать механизм доставки, устойчивый против атак посредника (MITM). Приемлемо использование https или ssh + scp. [delivery_mitm]
    Еще более сильным механизмом является выпуск программного обеспечения в виде пакетов, подписанных цифровой подписью, поскольку это смягчает атаки на систему распространения, но это работает только в том случае, если пользователи могут быть уверены, что открытые ключи для подписей верны и если пользователи действительно проверяют подпись.

    All delivery via HTTPS or SSH. GitHub repository accessed via HTTPS/SSH. Dependencies from crates.io over HTTPS with checksum verification. Cargo.lock pins dependency hashes. deny.toml restricts sources to crates.io only. No HTTP or insecure delivery mechanisms.



    НЕДОПУСТИМО получать криптографические контрольные суммы (например, sha1sum) по HTTP и использовать их без проверки криптографической подписи. [delivery_unsigned]
    Эти хеши могут быть изменены при передаче.

    No HTTP hash retrieval. All dependencies from crates.io over HTTPS with Cargo's built-in checksum verification. Cargo.lock contains cryptographic checksums for reproducible builds. deny.toml denies unknown registries/git sources. CI actions pinned by SHA hash, not tags.


  • Исправление обнародованных уязвимостей


    НЕДОПУСТИМО оставлять незакрытыми уязвимости со степенью серьезности средней или выше, опубликованные более 60 дней назад. [vulnerabilities_fixed_60_days]
    Уязвимость должна быть исправлена ​​и выпущена самим проектом (патчи могут быть разработаны в другом месте). Уязвимость считается опубликованной (для цели данного критерия) после того, как она имеет CVE с описанием, бесплатно доступным для общественности, (например, в National Vulnerability Database) или когда проект был проинформирован, и информация была опубликована для общественности (возможно, самим проектом). Уязвимость имеет среднюю и высокую степень серьезности, если ее базовая оценка по CVSS 2.0 равна 4 или выше. Примечание. Это означает, что пользователи могут оставаться уязвимыми для всех злоумышленников по всему миру на срок до 60 дней. Этот критерий часто намного легче выполнить, чем рекомендует Google в Rebooting responsible disclosure, поскольку Google рекомендует, чтобы 60-дневный период начинался, когда проект был уведомлен, даже если отчет не является общедоступным.

    No medium or higher severity vulnerabilities. cargo audit shows only 'unmaintained' warnings for transitive dev dependencies (not security issues). cargo-deny advisories check passes. CI runs cargo audit on every PR. Dependabot enabled for automated security updates.



    Проектам СЛЕДУЕТ оперативно исправлять критические уязвимости после сообщения о них. [vulnerabilities_critical_fixed]

    No critical vulnerabilities reported to date. SECURITY.md commits to 7-day fix timeline for critical issues. Demonstrated rapid development velocity (3 releases in 2 days). CI/CD enables quick releases, cargo audit catches new advisories, Dependabot automates security updates. Security review required for crypto changes.


  • Другие вопросы безопасности


    НЕДОПУСТИМА утечка действующих частных учетных данных (например, рабочий пароль или закрытый ключ), предназначенных для ограничения общего доступа, из публичных репозиториев. [no_leaked_credentials]
    Проект МОЖЕТ пропускать «шаблонные» учетные данные для тестирования и несущественные базы данных, при условии что они не предназначены для ограничения общего доступа.

    No credential files in repository (.env, .pem, .key excluded via .gitignore). Git history contains only code references (parameter names, type names), not actual secrets. GitHub Secret Scanning enabled. Test data uses synthetic/generated keys, not real credentials.


 Анализ 8/8

  • Статический анализ кода


    НЕОБХОДИМО применять по крайней мере, один инструмент анализа статического кода (помимо предупреждений компилятора и "безопасных" режимов языка) к любой предлагаемой основной версии создаваемого ПО до ее выпуска, если есть хотя бы один инструмент на свободном ПО, который реализует этот критерий на выбранном языке. [static_analysis]
    Средство анализа статического кода анализирует программный код (как исходный код, промежуточный код или исполняемый файл), не выполняя его с конкретными входами. Для целей этого критерия предупреждения компилятора и «безопасные» языковые режимы не считаются инструментами анализа статического кода (они обычно избегают глубокого анализа, поскольку скорость имеет жизненно важное значение). Примеры таких статических инструментов анализа кода включают cppcheck (C, C++), статический анализатор Clang (C, C++), SpotBugs (Java), FindBugs (Java; включая FindSecurityBugs), PMD (Java), Brakeman (Ruby on Rails), lintr (R), goodpractice (R), Анализатор качества Coverity, SonarQube, Codacy и статический анализатор кода HP Enterprise Fortify. Более крупные списки инструментов можно найти в таких местах, как Wikipedia list of tools for static code analysis, OWASP information on static code analysis, NIST list of source code security analyzers и Wheeler's list of static analysis tools. Если для используемого языка(ов) реализации нет доступных инструментов статического анализа на свободном ПО, выберите «неприменимо» (N/A).

    Multiple static analysis tools run before release: Clippy (500+ lint rules, 80+ custom configured), cargo-audit (security vulnerabilities), cargo-deny (dependencies), CodeQL (GitHub SAST). All run in CI on every PR and block merge on failure. All tools are FLOSS.



    ЖЕЛАТЕЛЬНО включать по крайней мере в один из инструментов статического анализа, используемых для критерия static_analysis, правила или подходы для поиска распространенных уязвимостей в анализируемом языке или среде. [static_analysis_common_vulnerabilities]
    Инструменты статического анализа, специально предназначенные для поиска распространенных уязвимостей, с большей вероятностью найдут их. Тем не менее, использование любых статических инструментов обычно помогает найти какие-то проблемы, поэтому мы предлагаем, но не требуем этого для получения базового значка.

    Multiple tools check for common vulnerabilities: Clippy (panic/crash, buffer access, integer overflow), cargo-audit (900+ CVEs from RustSec database), CodeQL (injection, path traversal, crypto misuse). Security lints explicitly configured at deny level in Cargo.toml.



    Все уязвимости со средней и высокой степенью серьезности, обнаруженные при статическом анализе кода, НЕОБХОДИМО своевременно исправлять после их подтверждения. [static_analysis_fixed]
    Уязвимость имеет среднюю и высокую степень серьезности, если ее оценка по CVSS 2.0 - 4 или выше.

    No medium+ static analysis vulnerabilities exist. CI blocks merge until static analysis passes (Clippy, cargo-audit). Historical commits show same-day fixes for static analysis issues. CONTRIBUTING.md requires all Clippy checks pass before merge. Dependabot automates security updates.



    ЖЕЛАТЕЛЬНО выполнять анализ статического исходного кода при каждом коммите или по крайней мере ежедневно. [static_analysis_often]

    Static analysis runs on every commit via GitHub Actions CI. Clippy, cargo-audit, cargo-deny, and CodeQL run on every push and PR. Pre-commit hooks run analysis locally before commit. Merging blocked until all static analysis passes. Additional daily scheduled security scans."


  • Динамический анализ кода


    ЖЕЛАТЕЛЬНО применять по крайней мере один инструмент динамического анализа к любой предлагаемой основной (major) версии программного обеспечения перед ее выпуском . [dynamic_analysis]
    Инструмент динамического анализа проверяет программное обеспечение, выполняя его с конкретными входными данными. Например, проект МОЖЕТ использовать инструмент фаззинг-тестирования (например, American Fuzzy Lop) или сканер веб-приложений (например, OWASP ZAP или w3af). В некоторых случаях проект OSS-Fuzz может быть готов применить фаззинг-тестирование к вашему проекту. Для целей этого критерия инструмент динамического анализа должен каким-то образом варьировать исходные данные, чтобы искать проблемы разного рода или быть автоматическим набором тестов с покрытием веток исполнения не менее 80%. Страница Википедии о динамическом анализе и cтраница OWASP о фаззинг-тестировании указывают некоторые инструменты динамического анализа. Использование инструмента/ов анализа МОЖЕТ, но не обязано быть сосредоточено на поиске уязвимостей в безопасности.

    Comprehensive dynamic analysis: cargo-fuzz with 7 fuzz targets (encryption, signatures, KEM, timing), proptest for property-based testing, daily scheduled fuzzing in CI. Runtime checks enabled: overflow-checks=true, debug-assertions=true in release builds.



    ЖЕЛАТЕЛЬНО регулярно использовать по меньшей мере один динамический инструмент (например, fuzzer или сканер веб-приложения) в сочетании с механизмом для обнаружения проблем безопасности памяти, таких как перезапись буфера, если программное обеспечение, создаваемое проектом, включает части, написанные на небезопасном языке (например, C или C++). Если проект не создает программное обеспечение, написанное на небезопасном языке, выберите «неприменимо» (N/A). [dynamic_analysis_unsafe]
    Примерами механизмов обнаружения проблем безопасности памяти являются Address Sanitizer (ASAN) (доступен в GCC и LLVM), Memory Sanitizer и valgrind. Другие потенциально используемые инструменты включают Thread Sanitizer и Undefined Behavior Sanitizer. Достаточно широкое использование утверждений (assertions) тоже может быть приемлемо.

    LatticeArc is 100% memory-safe Rust with #![forbid(unsafe_code)]. No C/C++ code in the project. The only C dependency (aws-lc-rs) is FIPS 140-3 validated with
    its own memory safety testing (ASan/MSan/fuzzing) performed by AWS security team.



    ЖЕЛАТЕЛЬНО включать в ПО, создаваемое проектом, достаточно много утверждений (assertions) времени выполнения, проверяемых при динамическом анализе. Во многих случаях эти утверждения не должны попадать в сборки под эксплуатацию (production). [dynamic_analysis_enable_assertions]
    Этот критерий не предполагает включения утверждений на этапе эксплуатации; решение об этом полностью лежит на проекте и его пользователях. Вместо этого критерий направлен на улучшение обнаружения ошибок во время динамического анализа перед развертыванием. Использование утверждений при эксплуатации полностью отличается от такового во время динамического анализа (например, при тестировании). В некоторых случаях включать утверждения при эксплуатации крайне неразумно (особенно в компонентах с высокой степенью целостности). Существует множество аргументов против включения утверждений в выпускаемых сборках: например, библиотеки не должны вызывать сбой при вызове, присутствие утверждений может привести к отклонению магазинами приложений и/или активация их при рабочем использовании может привести к раскрытию частных данных, таких как закрытые ключи. Помните, что во многих дистрибутивах Linux NDEBUG не определен, поэтому C/C++assert() в таких рабочих средах по умолчанию будет включен. Может быть важно использовать другой механизм утверждений или определить NDEBUG для эксплуатации в этих средах.

    Assertions enabled for all dynamic analysis. Tests run in debug mode with debug_assertions=true. Release builds retain overflow-checks=true and
    debug-assertions=true for cryptographic validation. Fuzz targets run with full assertions. proptest verifies properties across random inputs with prop_assert macros.



    Проект ОБЯЗАН своевременно исправлять все уязвимости средней и выше степени серьезности, обнаруженные при динамическом анализе кода, после их подтверждения. [dynamic_analysis_fixed]
    Если вы не используете динамический анализ кода и, следовательно, не обнаружили уязвимостей таким способом, выберите «неприменимо» (N/A). Степень серьезности уязвимости считается средней или выше, если уязвимость имеет среднюю или выше базовую оценку по Common Vulnerability Scoring System (CVSS). В версиях CVSS с 2.0 по 3.1 это соответствует оценке 4.0 и выше. Проекты могут использовать оценку CVSS опубликованную в любой широко используемой базе данных по уязвимостям (такой как National Vulnerability Database) используя самую новую версию CVSS доступную в этой базе данных. Вместо этого проекты могут сами вычислять серьезность используя последнюю версию CVSS на момент раскрытия уязвимости, если вводные для вычисления раскрываются вместе с публикацией уязвимости.

    No medium+ vulnerabilities discovered through dynamic analysis to date. 7 fuzz targets run daily in CI, with crash artifacts captured for analysis. Demonstrated rapid fix capability (3 releases in 2 days, same-day bug fixes). SECURITY.md documents response timelines: 7 days critical, 14 days high, 30 days medium.



Эти данные доступны по лицензии Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0). Это означает, что получатель данных может распространять данные с изменениями или без них, при условии, что получатель данных предоставляет текст данного соглашения вместе с распространяемыми данными. Пожалуйста, укажите в качестве источника LatticeArc-Founder и участников OpenSSF Best Practices badge.

Владелец анкеты на значок проекта: LatticeArc-Founder.
2026-01-30 15:38:28 UTC, последнее изменение сделано 2026-01-31 05:50:07 UTC. Последний раз условия для получения значка были выполнены 2026-01-31 05:44:05 UTC.