Archive


Category: 似水流年

  • 编程语言的边界

    最近重新复习了 Java 这门我曾经非常熟悉的语言 , 翻阅到 Bruce Ekecl 的 ON JAVA 一书, 他在卷首就引用了维根斯坦(Ludwig Wittgenstein)的名言: ‘The limits of my language means the limits of my world.’ 我的语言的局限即我的世界的局限. 作为程序员, 一种语言会悄然无息的引导你进入某种思维模式, 同时远离其他思维模式. 看到这里, 我深有同感, 我现在用的最多的编程语言是 Python , 而 C++ , Java 和 JavaScript 也是我熟知的语言, 我用它们来谋生, 写过许多正式项目和 side project. 在语言之间我也曾经有过好恶, 对 JavaScript 我还写过一篇吐槽的文章 C++程序员眼中丑陋的 JS 可是随着年岁的增长, 我也渐渐领悟到不应局限于语言的边界, 很多编程语言为了解决机器语言的复杂性, 引入了更多的自身的复杂性, 当看到 […]

  • 如何解决大模型的“幻象问题”

    大模型的“幻象问题”是指它们生成的回答可能看起来合理但实际上错误或虚构的现象,也被称为“AI 幻觉” (AI hallucination)。这种问题的根源在于大模型是概率生成模型,缺乏对事实的真正理解或对内容的验证能力。以下是一些可能的解决策略: 1. 提供高质量的上下文 大模型的输出质量高度依赖输入内容。如果输入信息模糊或不完整,模型容易生成虚构的回答。 解决方法 明确提示 (Prompt Engineering): 设计更具体、更详细的问题,减少模型的推测空间。 示例: 错误:解释一下宇宙的起源。 改进:根据当前主流科学理论解释宇宙的起源,例如大爆炸理论。 提供上下文:将相关的事实或背景信息直接提供给模型。 示例:在提示中明确说明所用的数据来源,例如 “基于 2021 年的全球人口统计数据”。 2. 结合外部知识库 大模型本身没有实时更新的知识,但可以通过结合外部知识库或 API 来增强准确性。 解决方法 知识增强 (Retrieval-Augmented Generation, RAG): 使用像 Pinecone、Weaviate 或 Elasticsearch 的向量数据库存储知识,然后根据输入从数据库中检索相关内容,再将其提供给模型生成回答。 示例工具: LangChain: 支持从外部知识库检索信息并增强生成内容。 Haystack: 支持文档检索和基于上下文的生成。 检索工具集成: 通过搜索引擎或领域专用的 API 来验证模型的生成内容。 3. 设置事实验证机制 在生成结果后,通过额外的步骤验证其准确性。 解决方法 事实检查模块: 在生成答案后,添加一个独立的模块验证模型输出是否与真实信息一致。 示例: 使用规则库、专家系统或查询外部数据库对模型生成内容逐项核实。 链式推理验证: 模型可以逐步输出推理过程,每一步都进行自检或外部验证。 示例:通过 […]

  • Deep path traversal algorithms

    Overview Graph algorithms are a set of instructions that traverse (visits nodes of) a graph and find specific nodes, paths, or a path between two nodes. Some of these algorithms are built into Memgraph and don’t require any additional libraries: Depth-first search (DFS) Breadth-first search (BFS) Weighted shortest path (WSP) All shortest paths (ASP) Reference […]

  • OIDC Review

    What’s OIDC OpenID Connect(OIDC)是基于 OAuth 2.0 规范框架(IETF RFC 6749 和 6750)的可互操作身份验证协议。允许客户端(如 Web 应用、移动应用等)通过验证用户身份并获取基本的用户信息,来进行安全的用户认证和授权。 对于开发人员来说,它为“当前使用连接的浏览器或移动应用程序的人的身份是什么”这个问题提供了一个安全且可验证的答案。最重要的是,它消除了设置、存储和管理密码的责任,这通常与基于凭据的数据泄露有关 OAuth 2.0 是关于资源访问和共享的,而 OIDC 是关于用户身份验证的。它的目的是为你提供多个站点的一次登录名。 OpenID Connect 的角色有下面三个: 身份提供者 (Identity Provider, IdP):身份提供者,负责用户身份认证,发布授权码和令牌,验证令牌有效性。常见的 IdP 有 Google、Facebook 等。 客户端 (Client):需要获取用户身份信息的应用程序,例如 Web 应用、移动应用等。 终端用户 (End User):使用客户端应用并希望通过身份提供者进行身份认证的用户。 它的流程步骤如下实体关系图所示 EndUser:请求访问客户端应用。 Client:重定向用户到身份提供者(IdP)进行身份认证。 IdP:认证用户身份。 EndUser:提供认证凭证。 IdP:返回授权码给客户端应用。 Client:使用授权码向身份提供者请求访问令牌和 ID 令牌。 IdP:发布访问令牌和 ID 令牌给客户端应用。 Client:使用令牌为用户提供访问资源的权限。 Client:可以选择性地向身份提供者验证令牌的有效性。 通过这些流程,OpenID Connect 协议实现了安全的用户身份认证和授权,确保用户能够安全地访问客户端应用所提供的资源。 Reference […]

  • OAuth 详解

    Problem 核心问题: "我怎样才能允许应用程序访问我的数据而又不必向其提供密码?" OAuth 是 REST/API 的委托授权框架。它允许应用获得对用户数据的有限访问权限(范围),而无需泄露用户的密码。它将身份验证与授权分离开来,并支持针对不同设备功能的多种用例。它支持服务器到服务器的应用、基于浏览器的应用、移动/本机应用以及控制台/电视。 您可以将其视为酒店钥匙卡,但适用于应用程序。如果您有酒店钥匙卡,则可以进入您的房间。如何获取酒店钥匙卡?您必须在前台进行身份验证才能获得它。通过身份验证并获取钥匙卡后,您可以访问整个酒店的资源。 简单来说,OAuth 是 (以照片打印程序 PhotoApp 为例) 应用程序向用户请求授权: PhotoApp 向 Alice 请求要访问 Alice 的照片 用户授权App并提供证明: PhotoApp 向 Alice 申请我授权访问她的 QQ 相册, 而 Alice 授权 PhotoApp 这一请求 应用程序向服务器提供授权证明以获取令牌: PhotoApp 向 QQ 相册提供 Alice 的授权证明 Token 仅限于访问用户为特定应用授权的内容 QQ 相册发给 PhotoApp 访问 Alice 相册图片的访问令牌 access token OAuth 流程中的参与者如下: 资源所有者 Resource Owner(RO):拥有资源服务器中的数据。例如,Alice 是她的 […]

  • 网络安全威胁及其消除

    网络安全威胁及其与脆弱性的关系 网络安全威胁被IEC 81001-5-1定义为潜在的安全违规,来源于各种情况、能力、行动或事件,可能会破坏安全性并对信息资产的保密性(confidentiality)、完整性(integrity)和可得性(availability)造成损害(IEC 81001-5-1)。 简单来说,它指的是信息资产在使用中可能出现的问题。只有在脆弱性存在并被威胁者利用的情况下时,安全违规才会发生。脆弱性是系统、应用程序、网络或器械中存在的漏洞或缺陷。它,可以被利用来危害信息系统的保密性、完整性和可得性。这些脆弱性可能存在于软件代码、配置、协议、硬件设计,甚至是人为活动中,可能被有意或无意地引入。 威胁建模在器械网络安全中的重要性 威胁建模是一种以结构化方式分析器械所面临安全威胁的方法。通过它可以识别、列举和优先排列处理与每个威胁相关的弱点。简单地说,一旦我们了解了可能出错的地方(即威胁),我们就可以根据器械的设计对威胁建立模型,从而了解威胁在器械及其连接的 IT 系统中的表现形式。 例如,考虑一个使用蓝牙无线传输健康数据的器械。对它来说,可预见的威胁之一就是健康信息的泄露。假设对这个器械的这一威胁进行建模,我们发现未加密的蓝牙数据传输是攻击者可能利用来实施这一威胁的安全弱点。 因此,研发团队增加了蓝牙数据加密这一设计要求,以解决这个安全弱点,进而减少威胁。我们可以从这个简化的例子中看到,威胁建模的目的是针对器械的设计分析网络威胁可实现的手法,从而找出并解决相关弱点,来确保器械的在使用中不受到该威胁的影响。 使用STRIDE启动威胁建模 在有了可用的系统描述之后,我们可以开始威胁建模,这也正是STRIDE开始发挥作用的时候。STRIDE代表Spoofing(欺骗)、Tampering(篡改)、Repudiation(否认)、Information disclosure(信息泄露)、Denial of service(拒绝服务)和Elevation of privilege(权限提升)。它们代表了针对信息系统最常见的六种安全威胁类型,可以类似理解为ISO 14971中医疗器械所面临的危害(harm)。STRIDE由微软的安全研究人员于1999年开发,是目前使用最广泛的结构化威胁建模技术之一 1. Spoofing 欺骗 防止非法获取或者伪造帐号信息, 访问我们的系统 非认证的用户不可访问系统 非授权的用户不可访问没有权限的模块, 不能进行非授权的操作、 2. Tampering 篡改 防止篡改或损坏系统中的数据 数据在传输层要安全, 要使用 HTTPS, TLS, DTLS 或者 SRTP 进行加密传输 3. Repudiation 否认 防止不承认对系统的攻击或者误用 管理员以及用户的关键操作要可追溯 4. Information Disclosure 信息泄露 配置文件中的帐户密码不可使用明文 PII (Personal Insensitive Information ) 安全 […]

  • 医疗器械及软件的网络安全

    医疗软件网络安全能力测试过程的要求 医疗器械网络安全是指保护医疗器械产品自身和相关数据不受未授权活动影响的状态,其保密性(Confidentiality)、完整性(Integrity)、可得性(Availability)相关风险在全生命周期均处于可接受水平。 保密性是指信息不被未授权实体(含产品、服务、个人、组织)获得或知悉的特性,即医疗器械产品自身和相关数据仅可由授权用户在授权时间以授权方式进行访问和使用。 完整性是指信息的创建、传输、存储、显示未以非授权方式进行更改(含删除、添加)的特性,即医疗器械相关数据是准确和完整的,且未被篡改。 可得性是指信息可根据授权实体要求进行访问和使用的特性,即医疗器械产品自身和相关数据能以预期方式适时进行访问和使用。 除保密性、完整性、可得性三个基本特性外,医疗器械网络安全还包括真实性(Authenticity)、抗抵赖性(Non-Repudiation)、可核查性(Accountability)、可靠性(Reliability)等特性。 真实性是指实体符合其所声称的特性 抗抵赖性是指实体可证明所声称事件或活动的发生及其发起实体的特性 可核查性是指实体的活动及结果可被追溯的特性 可靠性是指实体的活动及结果与预期保持一致的特性。 医疗器械网络安全能力 — 22项能力 序号 能力 英文和缩写 说明 1 自动注销 ALOF 产品在无人值守期间阻止非授权用户访问和使用的能力 2 审核 AUDT 产品提供用户活动可被审核的能力 3 授权AUTH 产品确定用户已获授权的能力 4 节点鉴别 NAUT 产品鉴别网络节点的能力 5 人员鉴别 PAUT 产品鉴别授权用户的能力 6 连通性 CONN 产品保证连通网络安全可控的能力 7 物理防护 PLOK 产品提供防止非授权用户访问和使用的物理防护措施的能力 8 系统加固 SAHD 产品通过固化措施对网络攻击和恶意软件的地狱能力 9 数据去标识化与匿名化 DIDT 产品直接去除、匿名化数据所含个人信息的能力 10 数据完整性与真实性 IGAU […]

  • 医用电气设备网络安全能力

    1.自动注销 (ALOF) 2.审核控制 (AUDT) 3.授权 (AUTH) 4.节点鉴别 (NAUT) 5.人员鉴别 (PAUT) 6.连通能力 (CONN) 7.物理防护 (PLOK) 8.系统加固 (SAHD) 9.数据去标识化与匿名化 (DIDT) 10.数据完整性与真实性 (IGAU) 11.数据备份与灾难恢复 (DTBK) 12.数据存储保密性与完整性 (STCF) 13.数据传输保密性 (TXCF) 14.数据传输完整性 (TXIG) 15.网络安全补丁升级 (CSUP) 16.现成软件清单 (SBOM) 17.现成软件维护 (RDMP) 18.网络安全使用指导 (SGUD) 19.网络安全特征配置 (CNFS) 20.紧急访问 (EMRG) 21.远程访问与控制 (RMOT) 22.恶意软件探测与防护 (MLDP) — 参见 "医用电气设备网络安全基本要求 YY/T 1843-2022"

  • MicroProfile

    Spec Config Fault Tolerance Health JWT Jakarta EE Metrics Open API Rest Client Telemetry Implementation MicroProfile MicroProfile Config MicroProfile Health MicroProfile Metrics MicroProfile Fault Tolerance MicroProfile Rest Client MicroProfile OpenAPI MicroProfile JWT Authentication MicroProfile Telemetry MicroProfile GraphQL MicroProfile Conference App

  • what AI-assisted programming can help programmer?

    概述 AI-assisted programming can significantly benefit programmers by enhancing productivity, reducing repetitive tasks, and assisting with complex problem-solving. Here are some key ways it helps: 1. Code Generation and Auto-Completion: AI tools like GitHub Copilot and ChatGPT can generate code snippets, complete lines, and even suggest entire functions based on comments or partially written code, […]