Java语言安全机制在移动Agent中的应用

随着Internet覆盖范围的日益扩大,有价值的信息资源在不断的增长,对网络的高效性、智能性、主动性和灵活性提出了更多的要求,对于如何捆绑分布异构环境中信息源的问题变得越来越突出。在网络分布式系统的实际应用中,一般采用Server/Client结构,在这种结构中,运行于Server和Client上进程间的通信是通过信息传送和远程过程调用(RPC)实现的,一般是同步实现的,即Client向服务器发出请求后就挂起本地进程而等待结果,远地Server按要求执行完所要求的数据处理后返回结果,当本地进程得到结果后就恢复运行。移动agent是这些概念的延伸,它是一个由Client向Server发送的一个程序,包括了代码、数据和执行逻辑。移动agent不必把结果返还给客户机,它可以迁移到其它服务器,把信息传回给源客户机,也可以通过适当安排迁移回源客户机。因此,与简单的过程调用相比,移动agent具有更强的自治性。它很好地解决了网络通信的瓶颈问题,增加了任务处理的并行程度,增强了系统的灵活性、可扩充性及容错能力。因此移动agent己经逐渐应用到各种分布式网络中,相信移动agent在未来的军事信息安全、企业信息传输安全保密方面会有好的发展前景。

移动Agent技术应用范围日益广泛,随之而来的系统安全性问题也就日益突出。本文对移动Agent系统中的主要安全威胁和Java语言的安全机制做了细致的分析,提出了利用java安全机制解决移动Agent安全问题的方法。

移动agent 的安全问题

虽然移动Agent技术具有很多优点,但是一个严峻的问题——安全却阻碍了它的应用。移动Agent可以把多台分布的计算机连接起来,构成一个计算基础设施,在其上可同时运行属于不同用户而且是潜在的不可信任用户的分布式应用程序。这些计算机分别属于不同的组织,有各自不同的用途,通过公共通信设施进行通信。在这样的环境下,存在着各种可能的不安全因素以及安全攻击。例如,未被授权的用户可以监听网络线路,在移动Agent 传输过程中窃听甚至修改其代码或数据;当 Agent 运行时,可能会攻击当地的主机,故意占用过多资源,或者利用系统中的漏洞取得特权,进而攻击主机或其它Agent 等等。归纳为如下几类:

第一类安全问题主要是恶意的或者是有错误的 Agent 利用主机上安全设施的不足或缺陷发起针对主机的攻击,主要有伪装、拒绝服务和未授权访问。

第二类问题是指 Agent 可能会利用系统的缺陷对在主机上运行的其它Agent 进行攻击,包括伪装、未授权访问、拒绝服务和抵赖。其实这个问题可以看成是第一类问题的子问题,首先,因为主机上的Agent 支持环境可能就包含一些 Agent,如负责通信的Agent,管理 Agent 名字空间的Agent 等,对这类Agent 的攻击等于是对系统进行攻击。其次,可以把主机上运行的Agent 看成是主机的一部分资源,Agent 对其它Agent 进行攻击也就是对主机的攻击。再次,从目前已有的安全措施来看,解决这两类问题所使用的技术十分类似。

第三类,在移动 Agent 环境下,不仅可能会有恶意的 Agent,而且也会存在恶意的主机对 Agent 进行破坏。由于 Agent发送到主机后要在其上运行,它的代码和数据以及运行时刻的通信对主机来说都是暴露无疑的,可以说主机为刀俎,Agent 为鱼肉,主机可以对 Agent 采取任何动作,所以保护 Agent 是所有问题中最困难的。也正因如此,才吸引了许多人花费大量的精力进行研究。

第四类,Agent 可以在一个站点上只消耗少量的资源,其行为也完全符合站点的安全策略,但它却暗中以隐蔽的方式破坏着网络的可用性,进而会使一些主机瘫痪。如恶意移动 Agent不断地复制自身,产生大最的移动Agent,并让它们在网络上来回流动,从而大量染耗系统的通信与计算资很,并可能最终导致运行环境的瘫痪。对这类攻击的防治也比较困难,从单个主机着手显然不能解决问题,必须从网络整体考虑。当网络从属于一个管理者时,网络上的各个主机之间比较信任,找到一个统一的方法相对来说还容易一些,否则,在像 Internet 这样无中心、无权威的网络上,困难就会大得多。

Java语言的安全机制

移动Agent需要在不同的主机上迁移,这样异质的环境下,移动Agent需要有可移植性,能在不同的主机上执行,因此,像JAVA这样的语言具有平台无关性、动态类装载、多线程和对象序列化等特点,使用相关的Java安全机制解决移动Agent的安全问题便是最佳的选择。

在Java中能够安全地运行通过Internet传递的各种Applet,正因为如此,Java不像别的语言和系统,在事后才想到要实现安全性,或者作为一种对应措施,插入一些安全性组件,安全机制是Java技术的一个不可分割的组成部分。

1、Java沙箱 (早期安全机制)

Java安全模式的重点在于保护最终用户不受从网上下载的破坏性程序的干扰。为达到这个目的,Java提供了一个专用的运行Java程序的沙箱。 安全模型的关键在于沙箱(sandbox)的概念。其思想是,若在主机上允许驻留一个程序,就必须为该程序提供一个“玩耍”的场所(即运行环境),但是一般情况下,必须保证程序限制在沙箱中,Java程序在它的沙箱内可做任何事情,但出此边界就不能有任何操作。例如,未经确认的Java Applet的沙箱禁止许多操作,其中包括:

时间: 2024-08-31 03:47:24

Java语言安全机制在移动Agent中的应用的相关文章

Java语言中的函数编程

Java 语言中常被忽视的一个方面是它被归类为一种命令式(imperative)编程语言.命令式编程虽然由于与 Java 语言的关联而相当普及,但是并不是惟一可用的编程风格,也不总是最有效的.在本文中,我将探讨在 Java 开发实践中加入不同的编程方法 ── 即函数编程(FP). 命令式编程是一种用程序状态描述计算的方法.使用这种范型的编程人员用语句改变程序状态.这就是为什么,像 Java 这样的程序是由一系列让计算机执行的命令 (或者语句) 所组成的.另一方面, 函数编程是一种强调表达式的计算

Java语言中字符的处理

山西省网络管理中心任军 ----摘要:本文主要讨论了Java语言中字符的特殊表达形式,尤其是中文信息的表达处理,阐述了字符处理的关键是要将十六位Unicode字符,转换为本地下层平台,也就是运行Java虚拟处理机的平台能够理解的字符形式. ----关键词:Java.字符.8位.16位.Unicode字符集 ----Java是一种编程语言.一个运行系统.一套开发工具和一个应用程序编程界面(API).Java建立在C++的熟悉.有用的特征之上,而取消了C++的复杂的.危险的和多余的元素.它是一个更安

第三讲 Java语言中的面向对象特性

对象 [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知道java语言在面向对象编程方面有何独特的特点吗? 难点: 1. 理解方法重载和方法重写,不要混淆了两者的使用. 2. 类变量和类方法的使用. 3. 接口的使用.3.1 面向对象技术基础 3.1.1 面向对象的基本概念 面向对象的基本思想 面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象.类

Java语言中链表和双向链表的实现

链表是一种重要的数据结构,在程序设计中占有很重要的地位.C语言和C++语言中是用指针来实现链表结构的,由于Java语言不提供指针,所以有人认为在Java语言中不能实现链表,其实不然,Java语言比C和C++更容易实现链表结构.Java语言中的对象引用实际上是一个指针(本文中的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以编写这样的类来实现链表中的结点. class Node { Object data; Node next;//指向下一个结点 } 将数据域定义成Object类是因为

Java 理论与实践: JDK 5.0 中更灵活、更具可伸缩性的锁定机制

伸缩 内容: synchronized 快速回顾 对 synchronized 的改进 比较 ReentrantLock 和 synchronized 的可伸缩性 条件变量 这不公平 结束语 参考资料 关于作者 对本文的评价 相关内容: Java 理论与实践 系列 Synchronization is not the enemy Reducing contention IBM developer kits for the Java platform (downloads) 订阅: develop

探索Java语言与JVM中的Lambda表达式

Lambda表达式是自Java SE 5引入泛型以来最重大的Java语言新特性,本文是2012年度最后一期Java Magazine中的一篇文章,它介绍了Lamdba的设计初衷,应用场景与基本语法.(2013.01.07最后更新) Lambda表达式,这个名字由该项目的专家组选定,描述了一种新的函数式编程结构,这个即将出现在Java SE 8中的新特性正被大家急切地等待着.有时你也会听到人们使用诸如闭包,函数直接量,匿名函数,及SAM(Single Abstract Method)这样的术语.其

This关键字在Java语言中的应用

应用一:引用成员变量. Public Class Student{ String name; //定义一个成员变量name private void SetName(String name){ //定义一个参数(局部变量)name this.name=name; //将局部变量的值传递给成员变量 } } 如上面这个代码中,有一个成员变量name.同时在方法中有个形式参数,名字也是name.然后再方法中将形式参数name的值传递给成员变量name.虽然我们可以看明白这个代码的含义,但是作为Java

Java语言入门教程(十六):Java语言中的接口

通过前面几篇文章的学习,初学者可以初步掌握Java语言中继承的概念和使 用方法,对抽象类的使用也有一定的理解.值得注意的是,Java中类与类的继承 是单继承,也就是一个子类最多同时可以继承一个父类.那么让我们看下面的例 子. 假设我们要开发一个游戏系统,而游戏系统中有三种飞行器:飞机.小鸟. 蜘蛛侠.这三种飞行器都需要实现起飞,飞行,降落的逻辑,但是实现方法各不 相同.那么这三个类应该有一个抽象类作为父类,规范共同行为. package com.csst.inter; public abstra

Java语言入门教程(十三):Java语言中继承中的构造方法问题

教程(十一)中,了解了Java语言中继承的基本概念.Java中类与类的继承 ,是单继承,主要目的是复用.子类对象可以复用父类中权限允许的属性和方法 ,所以子类的构造方法和父类的构造方法之间,有一定的调用关系,本文中将进 行详细介绍. 首先,需要记住一个事实:子类的任何一个构造方法,都将先调用父类某个 构造方法.如子类Trainer中的构造方法: public Trainer() { } 虽然这个构造方法的方法体中什么代码也没有写,但是也调用了父类 Employee的构造方法,默认调用的是Empl