Bandit 插件 B505 深度解析:Python 弱加密密钥检测实战指南
SAST应用安全【免费下载链接】banditBandit is a tool designed to find common security issues in Python code.项目地址https://gitcode.com/gh_mirrors/ba/bandit点击查看免费下载导读本文以 Bandit 安全扫描器中的B505weak_cryptographic_key检测插件为核心深入讲解它如何识别 Python 代码中不安全的 RSA、DSA 与 EC 密钥长度涵盖阈值划分逻辑、severity/confidence 分级、可配置参数、检测边界以及基于 examples/weak_cryptographic_key_sizes.py 的完整实战验证。读完本文你将掌握 B505 的触发条件、如何通过 Bandit 配置调优阈值以及如何在自己的代码中规避弱密钥告警。B505 是什么检测弱密钥长度的安全插件B505 是 Bandit 内置的测试插件用于检查 Python 代码中是否使用了过短的加密密钥。随着算力提升较短的密钥长度已可被暴力破解或因数分解攻击攻破因此该插件以 NIST 推荐标准为依据设置阈值RSA 与 DSA 算法推荐密钥长度 2048 及以上1024 及以下视为可破解椭圆曲线EC密钥推荐 224 及以上160 及以下视为可破解。凡是低于这些下限的密钥使用都会被 B505 标记为安全问题。该插件的完整源码位于 bandit/plugins/weak_cryptographic_key.py属于 B5xx密码学插件组其插件 ID 分组可参见 doc/source/plugins/index.rst 中的 ID 对照表。插件最早在 Bandit0.14.0版本引入并在1.7.3版本补充了 CWE 信息关联 CWE-326即“加密强度不足”。检测的核心对象三类受支持的密钥生成调用B505 并不是对所有密钥相关代码都做检查而是精确匹配以下两个主流加密库的密钥生成函数调用库/模块匹配的函数限定名 qual name对应算法cryptographycryptography.hazmat.primitives.asymmetric.dsa.generate_private_keyDSAcryptographycryptography.hazmat.primitives.asymmetric.rsa.generate_private_keyRSAcryptographycryptography.hazmat.primitives.asymmetric.ec.generate_private_keyECPyCryptoCrypto.PublicKey.DSA.generateDSAPyCryptoCrypto.PublicKey.RSA.generateRSAPyCryptodomeCryptodome.PublicKey.DSA.generateDSAPyCryptodomeCryptodome.PublicKey.RSA.generateRSA从源码结构看这一匹配逻辑分别由_weak_crypto_key_size_cryptography_io与_weak_crypto_key_size_pycrypto两个内部函数完成前者通过context.call_function_name_qual匹配 cryptography 库的调用后者匹配 PyCrypto/PyCryptodome 的调用。EC 曲线生成目前只覆盖 cryptography 库PyCrypto/PyCryptodome 的 EC 生成函数不在匹配范围内。阈值与分级High / Medium 两档告警机制默认阈值配置gen_config函数为 B505 提供了 6 个可调参数及其默认值源码见 bandit/plugins/weak_cryptographic_key.py配置项默认值含义weak_key_size_dsa_high1024DSA 密钥长度低于此值时告警 Highweak_key_size_dsa_medium2048DSA 密钥长度低于此值时告警 Mediumweak_key_size_rsa_high1024RSA 密钥长度低于此值时告警 Highweak_key_size_rsa_medium2048RSA 密钥长度低于此值时告警 Mediumweak_key_size_ec_high160EC 密钥长度低于此值时告警 Highweak_key_size_ec_medium224EC 密钥长度低于此值时告警 Medium分级判定逻辑_classify_key_size函数实现了分级判定源码见 bandit/plugins/weak_cryptographic_key.py当密钥长度低于 high 阈值如 RSA/DSA 小于 1024、EC 小于 160时报告High 严重级别、High 置信度当密钥长度低于 medium 阈值但高于等于 high 阈值如 RSA/DSA 在 1024~2048 之间、EC 在 160~224 之间时报告Medium 严重级别、High 置信度告警文本统一为算法 key sizes below 阈值 bits are considered breakable.并附带 CWE-326issue.Cwe.INADEQUATE_ENCRYPTION_STRENGTH。例如在 examples/weak_cryptographic_key_sizes.py 第 36 行中dsa.generate_private_key(512, backends.default_backend())使用了 512 位的 DSA 密钥会触发如下输出 Issue: DSA key sizes below 1024 bits are considered breakable. Severity: High Confidence: High CWE: CWE-326 (https://cwe.mitre.org/data/definitions/326.html) Location: examples/weak_cryptographic_key_sizes.py:36关键实现细节EC 曲线的长度推导对于 cryptography 库的 EC 密钥B505 并不是直接读取数值型的 key_size 参数而是通过curve参数可以是关键字参数curve或位置参数解析出曲线对象名再查表得到对应位长源码见 bandit/plugins/weak_cryptographic_key.py。内置曲线映射表包含曲线名位长SECT571K1 / SECT571R1571 / 570SECP521R1521BrainpoolP512R1512SECT409K1 / SECT409R1409BrainpoolP384R1 / SECP384R1384SECT283K1 / SECT283R1283BrainpoolP256R1 / SECP256K1 / SECP256R1256SECT233K1 / SECT233R1233SECP224R1224SECP192R1192SECT163K1 / SECT163R2163如果传入的曲线不在映射表中例如动态生成的曲线对象则保守地默认按 224 位处理再交由阈值逻辑判定。参数提取策略关键字参数、位置参数与默认值回退B505 在提取密钥大小时采用了“优先关键字参数、其次位置参数、最后默认值”的回退策略cryptography 库的 DSA/RSA优先读取key_size关键字参数其次读取位置参数DSA 在第 0 位、RSA 在第 1 位因为 RSA 的第 0 位是public_exponent两者都缺失时默认按 2048 位处理源码见 bandit/plugins/weak_cryptographic_key.py。这也意味着调用时若完全省略 key_size 参数B505 不会告警——它假定调用方使用了库的默认安全长度。PyCrypto/PyCryptodome优先读取bits关键字参数其次读取位置参数第 0 位缺失时同样默认 2048 位源码见 bandit/plugins/weak_cryptographic_key.py。EC 曲线curve关键字参数优先于位置参数。检测边界B505 的已知局限从源码与示例文件中可以明确以下检测边界使用时应心中有数变量化的密钥长度不检测_classify_key_size中当key_size为字符串即由变量传入无法静态求值时直接返回不做告警。例如 examples/weak_cryptographic_key_sizes.py 第 64-66 行rsa.generate_private_key(public_exponent65537, key_sizesome_key_size, ...)不会被标记。这体现了静态分析工具的本质局限——无法追踪跨函数或运行时的变量值。动态曲线对象无法解析当曲线通过表达式如curves[self.curve]create传入时映射表查不到该对象B505 会保守地按默认 224 位处理见 examples/weak_cryptographic_key_sizes.py此时告警结论可能不准。不覆盖 PyCrypto/PyCryptodome 的 EC 生成仅 cryptography 库的 EC 曲线被纳入映射表。实战验证用示例文件跑一遍 B505运行方式假设仓库已在本地 clone且 Bandit 已安装可直接在仓库根目录对示例文件运行bandit -f txt examples/weak_cryptographic_key_sizes.pyexamples/weak_cryptographic_key_sizes.py精心构造了三类场景正确用法2048 位及以上、SECP384R1 等安全曲线、弱密钥用法1024 位 RSA/DSA、SECT163R2 等、以及变量化/动态化场景。期望输出按照 tests/functional/test_functional.py 中的功能测试断言对该示例文件运行 B505 应得到16 个告警全部为 High 置信度其中 8 个 High 严重级别、8 个 Medium 严重级别。具体对应关系为8 个 Highdsa.generate_private_key(key_size1024)、dsa.generate_private_key(512, ...)、rsa.generate_private_key(key_size1024)、rsa.generate_private_key(3, 512, ...)、两个ec.generate_private_key(curveec.SECT163R2)变体、pycrypto_*与pycryptodomex_*的 1024 位调用各 1 个8 个 Medium密钥长度介于 high 与 medium 阈值之间如示例中 1024 位 DSA/RSA 实际触发 Medium 档位的场景EC 曲线落在 160~224 区间如 SECT163R2 的 163 位落在 High 档而 192 位 SECP192R1 等落在 Medium 档时的告警。说明功能测试统计的是对示例文件的整体断言8 High 8 Medium16 个告警置信度全为 High具体告警行可结合-v详细输出对照示例文件逐行核对。如需只看 B505 的告警可配合-t B505过滤测试 IDbandit -t B505 -f txt examples/weak_cryptographic_key_sizes.py自定义阈值通过 Bandit 配置文件调优配置机制说明Bandit 1.0 之后配置文件为可选。插件如需配置项必须实现模块级的gen_config函数B505 即如此该函数以插件名为参数返回默认配置字典机制说明见 doc/source/plugins/index.rst 的 Config Generation 一节。当不指定配置文件、或配置文件缺少该插件段落时gen_config的默认值即生效。Bandit 还提供了bandit-config-generator工具可自动为所有已发现的插件生成配置模板块doc/source/config.rst 的 Generating a Config 一节生成的模板中即可看到 B505 的 6 个配置项按需删改即可。自定义配置示例若企业安全基线要求 RSA/DSA 不低于 3072 位、EC 不低于 256 位可创建如下bandit.yamlplugins: weak_cryptographic_key: weak_key_size_dsa_high: 2048 weak_key_size_dsa_medium: 3072 weak_key_size_rsa_high: 2048 weak_key_size_rsa_medium: 3072 weak_key_size_ec_high: 224 weak_key_size_ec_medium: 256运行时通过-c指定配置文件bandit -c bandit.yaml -r .配置文件中的插件配置段落名需与测试方法名即weak_cryptographic_key一致Bandit 才会读取并覆盖gen_config默认值。如何规避 B505 告警正确的修复姿势修复弱密钥告警核心是使用达到安全标准的密钥长度与曲线from cryptography.hazmat import backends from cryptography.hazmat.primitives.asymmetric import dsa, ec, rsa # 正确RSA 2048 位及以上 rsa.generate_private_key(public_exponent65537, key_size2048, backendbackends.default_backend()) # 正确DSA 2048 位及以上 dsa.generate_private_key(key_size2048, backendbackends.default_backend()) # 正确EC 使用安全曲线如 SECP384R1384 位 ec.generate_private_key(curveec.SECP384R1, backendbackends.default_backend())关于# nosec注释B505 只在确认密钥长度不安全时告警因此不推荐用# nosec直接压制此类告警正确做法是提升密钥长度本身。若确因特殊兼容性原因无法立即升级应在注释中说明原因并接受人工复核例如rsa.generate_private_key(public_exponent65537, key_size1024, # nosec B505 - 兼容遗留系统待迁移后升级 backendbackends.default_backend())总结B505 通过匹配 cryptography、PyCrypto、PyCryptodome 三套库的密钥生成调用以 RSA/DSAhigh1024、medium2048与 EChigh160、medium224的默认双档阈值输出 High/Medium 告警并支持通过gen_config暴露的 6 个配置项完全自定义安全基线。其“关键字参数 → 位置参数 → 默认值”的参数提取策略、EC 曲线映射表查长方案以及“变量化密钥长度不检测、动态曲线对象保守默认”的边界处理共同构成了这一插件的完整行为画像。理解这些实现细节能帮助你在真实项目中准确解读 B505 的每一份报告并把安全基线固化到 Bandit 配置中。相关资源插件源码bandit/plugins/weak_cryptographic_key.py测试示例examples/weak_cryptographic_key_sizes.py功能测试断言tests/functional/test_functional.py插件机制与配置生成说明doc/source/plugins/index.rstBandit 配置与bandit-config-generator用法doc/source/config.rst赞分享SAST应用安全【免费下载链接】banditBandit is a tool designed to find common security issues in Python code.项目地址https://gitcode.com/gh_mirrors/ba/bandit点击查看免费下载相关推荐5步掌握React SaaS主题定制从零打造个性化企业级界面5步掌握React SaaS主题定制从零打造个性化企业级界面 想要快速构建专业SaaS应用却苦于界面设计React SaaS Template为你提供了完美Bandit 插件 B507 深度解析检测 Paramiko SSH 主机密钥验证缺失ssh_no_host_key_verificationBandit 插件 B507 深度解析检测 Paramiko SSH 主机密钥验证缺失ssh_no_host_key_verification 导读 B5SAST应用安全小爱音箱接入大语言模型从Docker部署到自定义语音助手的完整教程小爱音箱接入大语言模型从Docker部署到自定义语音助手的完整教程 周五晚上你对客厅的小爱音箱说小爱同学给我讲个睡前故事等回来一句抱歉我没听懂SAST应用安全上一篇猫抓浏览器扩展完整教程3分钟学会网页视频下载神器下一篇SeleniumBase Case Plans 实战指南用 Markdown 表格管理测试用例计划与 case_summary.md 汇总创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Python环境配置与PyCharm安装全指南:从零基础到项目跑通

Python环境配置与PyCharm安装全指南:从零基础到项目跑通

1. 为什么Python环境配置总让人抓狂刚接触Python的人,十有八九会在环境配置这一步卡住。不是装完Python发现命令行里敲python没反应,就是装好了PyCharm却提示找不到解释器,再不然就是pip装包时一堆红色报错。这些问题的根源其实不复杂&#x…

2026/9/26 15:50:22 阅读更多 →
使用 @yarnpkg/builder 构建 Yarn 插件:脚手架、TypeScript 打包与发布全指南

使用 @yarnpkg/builder 构建 Yarn 插件:脚手架、TypeScript 打包与发布全指南

开发工具CLI 【免费下载链接】berry 📦🐈 Active development trunk for Yarn ⚒ 项目地址: https://gitcode.com/gh_mirrors/be/berry 点击查看 免费下载 本文面向希望在 Yarn 3.x 生态中开发、构建与管理复杂插件的开发者,完整…

2026/9/26 15:50:22 阅读更多 →
PaddleSeg 训练实战 FAQ 全解析:从预训练权重加载到数据增强、SOTA 与可视化排查

PaddleSeg 训练实战 FAQ 全解析:从预训练权重加载到数据增强、SOTA 与可视化排查

人工智能计算机视觉预训练 【免费下载链接】PaddleSeg Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting,…

2026/9/26 15:50:22 阅读更多 →

最新新闻

验证码识别脚本实战:OpenCV预处理+CNN训练全流程解析

验证码识别脚本实战:OpenCV预处理+CNN训练全流程解析

简介:面向计算机相关专业学习者与机器学习初学者的实战项目,基于机器学习算法实现验证码识别,包含可直接运行测试的完整源码与说明文档,适用于课程设计、毕业设计或企业初期项目演示,具有较高的学习借鉴价值。压缩包共…

2026/9/26 16:36:42 阅读更多 →
基于自适应关键帧的微表情识别算法实现与避坑指南

基于自适应关键帧的微表情识别算法实现与避坑指南

简介:这份资源面向情感计算与计算机视觉方向的研究者、学生及开发者,提供一套基于自适应关键帧的视频微表情识别算法完整实现,用于解决微表情持续时间短、识别难度大、计算开销高等问题。压缩包共14个文件,约404KB,以6…

2026/9/26 16:36:42 阅读更多 →
科研成果申报管理系统源码:从跑通到改造的完整指南

科研成果申报管理系统源码:从跑通到改造的完整指南

简介:这份科研成果申报管理系统源码面向计算机专业学生及需要完成毕业设计的开发者,提供一套覆盖项目申报、评审管理、进度跟踪与文档管理等环节的完整Web应用实现,帮助读者理解科研管理业务的数字化流程与软件工程落地方式。压缩包共155个文…

2026/9/26 16:36:42 阅读更多 →
基于Zi-Pi指标的微生物网络关键物种识别:R语言实现与社区分析指南

基于Zi-Pi指标的微生物网络关键物种识别:R语言实现与社区分析指南

简介:面向微生物网络分析中节点模块内连通度与模块间连通度的量化需求,这份资源提供了基于R语言的完整计算方案,适用于生态学、生物信息学等领域研究者。压缩包内共2个文件,包含1个R脚本和1个graphml网络文件,脚本可直…

2026/9/26 16:36:42 阅读更多 →
宠物管理系统全栈教学闭环:原型→数据库→源码实战

宠物管理系统全栈教学闭环:原型→数据库→源码实战

简介:本资源是一套完整的宠物管理系统开发学习套件,面向Java或Web全栈初学者及课程设计学生,聚焦宠物服务类信息化管理场景,涵盖需求分析、界面交互与数据持久化全流程实践。压缩包共4个文件,含2个ZIP(分别…

2026/9/26 16:36:42 阅读更多 →
python的智能制造导论工业场景模拟第一百二十九篇:仿真物料来料波动场景,测试工艺系统自适应调整能力,统计不同来料下产品不良率变化。

python的智能制造导论工业场景模拟第一百二十九篇:仿真物料来料波动场景,测试工艺系统自适应调整能力,统计不同来料下产品不良率变化。

仿真物料来料波动场景,测试工艺系统自适应调整能力,统计不同来料下产品不良率变化周四下午两点,质量部的小陈抱着一摞首件检验报告冲进工艺办公室,脸色不太好看。"你看这组数据,"她把报告摊在桌上&#xff0…

2026/9/26 16:35:42 阅读更多 →

日新闻

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、…

2026/9/26 0:00:25 阅读更多 →
学校官网模拟全流程实践:从页面布局到后端接口与部署

学校官网模拟全流程实践:从页面布局到后端接口与部署

如果你正在找一门 Web 大作业的题目,或者刚开始接触 Web 前端开发想做点能拿来展示的东西,“学校官网模拟”几乎是最稳的选择。题目看着简单,但要把导航、新闻列表、轮播 Banner、二级页面、后台数据都串起来,其实已经把前端布局、…

2026/9/26 0:00:25 阅读更多 →
超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

简介:这是一份面向游戏开发初学者与C进阶学习者的超级玛丽(超级马里奥)游戏源码,基于C面向对象编程实现,适合想通过经典项目理解游戏主循环、角色类设计、地图关卡加载与物理碰撞检测的读者参考。压缩包共49个文件&…

2026/9/26 0:00:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →